监听计划 (HNSDFZ #7)
题目描述
黑猫警长Lunk最近发现了
Lunk决定派遣间谍渗入MHA集团的通信网络中来监听他们。MHA集团的通信网络是依靠两两集团之间的通信线路构成的。消息可以通过多条通信线路到达其他集团。Lunk的间谍十分强大,他们也可以通过这些通信线路来监听每一个能到达的集团。
然而Lunk是资本家,他不希望花费太多资本用于雇佣间谍。他只想用最少的间谍来监听所有的MHA集团。很不幸的是,这些集团间的通信线路质量不好,有一定的寿命,MHA集团每天都会添加一些新的通信线路来确保通信畅通。因此Lunk希望知道每天通信网络稳定后,最少需要多少个间谍才可以监听所有的集团。
实现
本题采用交互式测评。请在下载一栏中获取样例交互库。
样例交互库包含network.h
和implementer.cpp
两个文件。选手源程序需要包含network.h
这个头文件。
你需要实现以下四个函数:
$\text{initialize}(n, \;q)$ :在交互库初始化时会调用该函数,用于初始化你的程序。$n$ 表示MHA集团的数量。$q$ 表示天数,意思是Lunk将只关注第$1$ 到第$q$ 天的情况。
$\text{add-connection}(u, \;v, \;t)$ :单个数据点中将会被调用$q$ 次,表示每天MHA集团加入的新的通信线路。$u$ 、$v$ 表示在编号为$u$ 和$v$ 的两个MHA集团间架设通信线路。$t$ 表示通信线路的寿命。如果该线路是第$i$ 天加入的,那么这条线路只会在$[i, \;i + t)$ 这段时间内有效。
$\text{query}()$ :每次调用完$\text{add-connection}$ 之后会被调用,用于回答Lunk的询问。$\text{finalize}()$ :交互库结束时将调用该函数,用于释放你程序所使用的资源。
network.h
中也有对这四个函数的注释文档。
implementer.cpp
是样例交互库。假设你编写的源文件为network.cpp
,那么使用以下命令编译:
1 | g++ implementer.cpp network.cpp -o exec
|
exec
是可执行文件。
输入格式
第一行输入两个正整数
接下来
最开始MHA集团之间没有通信线路。
输出格式
输出
样例输入
1 2 3 4 5 | 4 4 1 2 3 2 3 2 3 4 1 4 4 10086 |
样例输出
1 2 3 4 | 3 2 1 4 |
限制
本题共
数据编号 | ||
---|---|---|
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 |
对于所有数据,满足
时间限制:
空间限制:
注意:交互库本身的运行所用时间不会超过