平衡树真是神奇。
传送门
题解
对于每一个联通块,都可以用一棵Splay来维护。
对于合并操作,可以采用启发式合并的方法,将小Splay接到大的Splay上去,然后把小的Splay的每一个节点都旋转到根节点(其实就是相当于把小的Splay拆了之后一个个加入到大的Splay里)。
对于一个节点,由于每次都是由小树往大树里加,所以进行一次合并之后,树的大小至少变到原来小树的两倍。所以每一个节点最多被合并$\log n$次。
所以时间复杂度为$\Theta(n\log^2n)$。
代码
1 |
|