3514: Codechef MARCH14 GERALD07加强版
Time Limit: 60 Sec
Memory Limit: 256 MB
Submit: 1900
Solved: 721
[ Submit][ Status][ Discuss]
Description
N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。
Input
第一行四个整数N、M、K、type,代表点数、边数、询问数以及询问是否加密。
接下来M行,代表图中的每条边。
接下来K行,每行两个整数L、R代表一组询问。对于type=0的测试点,读入的L和R即为询问的L、R;对于type=1的测试点,每组询问的L、R应为L xor lastans和R xor lastans。
Output
Sample Input
3 5 4 0
1 3
1 2
2 1
3 2
2 2
2 3
1 5
5 5
1 2
Sample Output
2
1
3
1
HINT
对于100%的数据,1≤N、M、K≤200,000。
2016.2.26提高时限至60s
Source
这是一道关于LCT维护动态图的连通性问题。
先说做法:
1.先将每条边加入图中,然后如果这条边所在两个点已经构成了环,那么把这个环中最早加入的一条边,并把这条边记录为当前边的前驱。early[i]=j
2.那么对于l~r区间的每天边,我们需要的答案就是n-(∑[early[i]
About正确性:如果要是early[i]
维护?:对于1.可以用LCT,对于一条边记其边权是其加入时间戳。然后边权转点权,用LCT维护最小值节点即可。对于2.可以用主席树,查询区间小于某个数的个数即可。
#include
#include
#include
#include
#include
#include