有时候,一些操作并不支持删除,但支持撤销(比如并查集),就用线段树分治。
可撤销并查集
用按秩合并,但不能路径压缩。
记录一个操作栈,代表第 \(i\) 次操作。撤销的时候就弹栈,复原 \(x\) 的父亲为它自己,以及 \(y\) 的
height
即可。
二分图
暴力的话,用扩展域并查集,但是不好删除,但是好撤销。
线段树上 \([l,r]\) 代表 \(l\sim r\) 时候的操作有什么(用 vec
)。然后 dfs 一遍线段树,遍历到叶子节点的时候判断一下是否合法,回溯时撤销并查集即可。因为并查集操作是 \(O(\log n)\) 的,所以总的是 \(O(K+m\log n)\)(应该是。)。