这是一道交互题,本题仅支持 C++。
法老们发现了标号从
为了促进传输系统的广泛使用,法老们设计了一个供游客们在乘坐传送系统时可以进行的游戏。一名游客可以从任一星球出发。标号
目前,对于每个星球
传送器随着时间不断建立。随着传送器的建立,一名游客也许有可能获得无穷多枚邮票。准确来说,这种情况会在存在一个满足如下条件的星球序列
。 。 。- 对于每个星球
( ),存在一个传送器 。
注意一名游客能够使用起始传送器和任何一个目前已经建立的传送器。
你的任务是,帮助法老验证在每次加入新的传送器后,一位游客是否能够拿到无穷多枚邮票。
实现细节
你需要实现下述函数:
init(int n, int k)
:星球数量。 :特殊星球数量。- 这个函数只会被调用一次,早于任何一次
add_teleporter
调用。
int add_teleporter(int u, int v)
和 :被加入传送器的起始和目的星球。- 这个函数至多被调用
次( 的取值范围参阅“约束条件”部分的内容)。 - 如果当传送器
被加入后游客能够获得无穷多枚邮票,函数需要返回 。否则,这个函数应该返回 。 - 一旦函数返回了
,你的程序将会被终止。
输入格式
评测程序示例按照如下的格式读取输入数据:
- 第
行: 。 - 第
行( ): 。
评测程序示例首先调用 init
,然后按照 add_teleporter
:
输出格式
程序将输出多次调用 add_teleporter
中首次返回 add_teleporter
调用中都返回
如果某次 add_teleporter
调用返回了
样例 1
input
6 5 3 3 4 5 0 4 5 5 3 1 4
output
4
explanation
考虑下面的函数调用:
init(6, 3)
在这个例子里,有
假设评测程序执行下述调用:
- (0)
add_teleporter(3, 4)
:应该返回 。 - (1)
add_teleporter(5, 0)
:应该返回 。 - (2)
add_teleporter(4, 5)
:应该返回 。 - (3)
add_teleporter(5, 3)
:应该返回 。 - (4)
add_teleporter(1, 4)
:在这种情况下,是可能获得无穷多枚邮票的。例如,游客可以从星球 出发,按照 这个顺序进行。因此,函数需要返回 ,进一步你的程序会被终止。
下图对于这个例子进行了说明。特殊星球和起始传送器都使用粗体字表示。通过 add_teleporter
加入的传送器,按照顺序被标记为
样例 2
input
4 1 2 1 1
output
0
explanation
考虑下面的函数调用:
init(4, 2)
在这个例子里,有
假设评测程序执行下述调用:
add_teleporter(1, 1)
:当加入传送器 后,我们就能够获得无穷多枚邮票。例如,游客从星球 出发,可以使用传送器 到达星球 无限次。因此,函数需要返回 ,然后你的程序被终止。
样例 3
input
4 3 2 1 3 2 0 3 2
output
2
约束条件
。 。 。
对于每次调用 add_teleporter
函数:
和 。- 在传送器
加入之前,不会有从星球 到星球 的传送器。
子任务
- (
分) 。 - (
分) 。 - (
分) 。 - (
分) 。 - (
分)没有额外的约束条件。
时间限制:
空间限制: