题意
给你⼀个连通的平⾯图(平⾯图是可以画在平⾯上并且使得不同的边可以互不交叠的图)。接下来有
q
q
q次操作:
操作"-",删去边 ,询问删完后有⼏个连通块。
操作"?",询问 在不在⼀个连通块中,如果是,输出1,否则输出0。
数据范围:
n
≤
100000
,
m
,
q
≤
200000
n\le 100000,m,q\le 200000
n≤100000,m,q≤200000
题解
对于判断平面图的联通性,考虑转化成对偶图,发现平面图新增加连通块,当且仅当删去的边在对偶图中形成环,于是构出对偶图后用并查集维护,即可解决“-”操作。
建对偶图的过程:把每条无向边看作两条有向边,每次新增一个区域时,任意选一条边u->v开始,找到v出发的在这条边顺时针方向的第一条边,以此类推,直到再次找到u->v这条边,经过的所有边即为属于这个区域,每条无向边的两条有向边所属的区域即为这条无向边连接的区域。
对于“?”操作,在每次新增连通块时,不可避免地要重新将一个新分裂出的联通块的所有点标号。于是考虑启发式分裂:因为遍历一个连通块的效率是它的边数,故对于新分裂的两个连通块,要用边数较小的那个的效率实现。每次在两个连通块中都多遍历一条边,直到有一个连通块被遍历完即可。