星球联盟

来源:互联网 发布:淘宝开店挣钱吗 编辑:程序博客网 时间:2024/06/02 11:20

星球联盟(alliance) 订正
在遥远的S星系中一共有N个星球,编号为1…N。其中的一些星球决定组成联盟,以方便相互间的交流。
但是,组成联盟的首要条件就是交通条件。初始时,在这N个星球间有M条太空隧道。每条太空隧道连接两个星球,使得它们能够相互到达。若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径。
为了壮大联盟的队伍,这些星球将建设P条新的太空隧道。这P条新隧道将按顺序依次建成。一条新轨道建成后,可能会使一些星球属于同一个联盟。你的任务是计算出,在一条新隧道建设完毕后,判断这条新轨道连接的两个星球是否属于同一个联盟,如果属于同一个联盟就计算出这个联盟中有多少个星球。

输入格式:
第1行三个整数N,M和P,分别表示总星球数,初始时太空隧道的数目和即将建设的轨道数目。
第2至第M+1行,每行两个整数,表示初始时的每条太空隧道连接的两个星球编号。
第M+2行至第M+P+1行,每行两个整数,表示新建的太空隧道连接的两个星球编号。这些太空隧道按照输入的顺序依次建成。

输出格式:
输出共P行。如果这条新的太空隧道连接的两个星球属于同一个联盟,就输出一个整数,表示这两个星球所在联盟的星球数。如果这条新的太空隧道连接的两个星球不属于同一个联盟,就输出”No”(不含引号)。

样例输入:
样例一
3 2 1
1 2
1 3
2 3
样例二
5 3 4
1 2
4 3
4 5
2 3
1 3
4 5
2 4

样例输出:
样例一
3
样例二
No
3
2
5

数据范围:
对于10%的数据有1≤N,M,P≤100;
对于40%的数据有1≤N,M,P≤2000;
对于100%的数据有1≤N,M,P≤200000。

时间限制:
1s

空间限制:
256M

提示:
remove!!!

一个值得注意的方法。
先把一张图建成他的生成森林然后再用各种方法做。
好处:1、计算这种两条路径的问题特别有优势。
2、以最早的时刻保留边,和查询顺序照应。
3、生成森林以最少的边保留了连通性

原创粉丝点击