LCT 与连通问题
所有问题只有加边,没有删边。
一.维护连通性
并查集就可以了。
二.维护割边
考虑连边时维护割边。
-
\(u,v\) 不联通,直接连上即可,可以看出,这条边是割边。
-
\(u,v\) 已经联通,说明构成一个环,原来在 \(u \to v\) 路径上的边都不再是割边。
如果把割边的值设为 \(1\) ,非割边的值设为 \(0\) ,那么只需要修改和维护链的和即可。
因为根会变,所以边的信息需要新建点来存储。
三.维护割点
圆方树有一个很好的性质:两点之间的割点为圆方树上两点路径的圆点(含端点)。
那么用考虑用动态树来动态维护圆方树。
-
\(u,v\) 不联通,直接连上即可。
-
\(u,v\) 联通,那么将 \(u,v\) 路径上的边删除,然后路径上的点连向一个方点。
这会出现两个方点相连的奇怪形态,并不符合圆方树定义。不过我们只关心圆点,这并不会对答案造成影响。
每个环合并一次后直径为 \(2\) ,即环上的点再次合并只有常数次。那么总复杂度便为每个点第一次被合并的复杂度加上多次合并复杂度,即 \(\mathcal O(n \log n+m \log n)\)
把上面两道题粘在一起就是 P5489 EntropyIncreaser 与 动态图。