题目
Description
你应该知道无向图的连通块的数量,你应该知道如何求连通块的数量。当你兴奋与你的成就时,破坏王Alice拆掉了图中的边。当她发现,每删去一条边,你都会记下边的编号,同时告诉她当前连通块的个数。
然而,对边编号简直就是个悲剧,因为Alice为了刁难你,拆掉编号从l到r的边,当然你需要做的事情就是求连通块的个数。如果你答对了,Alice会把拆掉的边装好,迚行下一次破坏。如果你无法完成这个任务,Alice会彻底毁了你的图。
进行完足够多次之后,Alice觉得无聊,就玩去了,而你却需要继续做第三题。
Input
第一行两个整数n,m,表示点数和边数。
之后m行每行两个整数x,y,表示x与y之间有无向边。(按读入顺序给边编号,编号从1开始)
一行一个整数k,表示Alice的破坏次数。
之后k行,每行两个整数l,r。
Output
k行,每行一个整数。
Sample Input
6 5
1 2
5 4
2 3
3 1
3 6
6
1 3
2 5
1 5
5 5
2 4
3 3
Sample Output
4
5
6
3
4
2
Data Constraint
对于30%的数据,n<=100,k<=10
对于60%的数据,k<=1000
对于100%的数据,n<=500,m<=10000,k<=20000,1<=l<=r<=m
分析
记录联通块的情况,我们一般会选择并查集。
我们先来考虑 L 的情况,
如果全部 L 都是 1 这样的做法是十分简单的,不过需要离线操作:
根据 R 的大小排一次序,然后就开始连边。
- 但是现在的 L 不一定是1,所以我们要想一下其他方法。
题目要求删除 [l,r] 这个区间,所以我们需要连边的部分分成了两部分。
第一部分是1~l-1,第二部分是r+1~n
- 那我们可不可以预处理出1~l-1 和 r+1~n的联通情况?
因为n很小,所以我们可以先预处理。
用 fi<