题目描述
地理课上,老师给出了一个巨大的地图,由于世界日新月异,会有一些道路在某一时刻被删除,也会有一些道路在某一时刻被修建。这里的道路均为双向的。
老师认为,有一些城市被分在了一个连通块中可以相互到达,而有一些城市不能够相互到达。而他想知道,每个时刻所有连通块大小的乘积是多少?
wzy看到这个地图的时候就蒙了,还好那只上天的喵及时帮助了他。现在他把这个毒瘤的地图拿过来给你,想试试看你能不能求出来。由于答案可能很大,输出乘积mod109+7mod109+7即可。
输入
第一行两个数n,mn,m,表示有nn个点,mm个时刻。接下来mm行每行三个数,要么是1uv1uv,要么是2uv2uv,分别表示添加一条无向边和删除一条无向边。
输出
共mm,每行一个数表示连通块大小乘积mod1,000,000,007mod1,000,000,007
样例输入
样例输入#1
5 6
1 1 3
1 2 3
1 1 2
1 4 5
1 3 4
2 3 4
样例输入#2(对应subtask1)
见example\geography\geography2.in
样例输入#3(对应subtask2)
见example\geography\geography3.in
样例输出
样例输出#1
2
3
3
6
5
6
样例输出#2
见example\geography\geography2.out
样例输出#3
见example\geography\geography3.out
提示
上面是每个时刻操作后的图。乘积分别为:
2*1*1*1=2,3*1*1=3,3*1*1=3,3*2=6,5,3*2=6
数据范围及约定
subtask1:30pts,n≤1,000,m≤2,000n≤1,000,m≤2,000
subtask2:20pts,满足没有删除操作。
subtask3:50pts,n,m≤100,000n,m≤100,000保证没有重边自环,不会删除不存在的边。
题解:每一条边都会存在一段时间,所以我们可以给每一条边一个编号,在线段树上进行覆盖。
而答案就是每一个叶子结点的答案。
所以我们可以用可退还的并查集统计答案。
#include
#include
#include
#include
#include