检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
Link-Cut Tree 是一种用来解决动态树问题的数据结构。
它采用类似树链剖分的轻重边路径剖分,把树边分为实边和虚边,并用 Splay 来维护每一条实路径。Link-Cut Tree 的基本操作复杂度为均摊 ,但常数因子较大,一般效率会低于树链剖分。
#主要操作
#Splay 相关
LCT 中的 Splay 与原版 Splay 之间存在一定差别。
#isRoot 函数
判断节点 是否为其所属 Splay 的根。
1 |
|
#旋转(rotate)操作
判断根不能以父亲节点是否存在为依据,而应该使用上文中的 isRoot()
函数。
1 |
|
1 |
|
#Splay 操作
要先自顶到下将路径上的所有节点 pushdown 后再进行 Splay 操作。
1 |
|
1 |
|
#Access 操作
该操作意为「访问」节点 ,被访问过的节点会有一条实路径连接到根节点,且该节点在这条路径的头部(最下端)。
1 |
|
#makeRoot 操作
使节点 成为原树的根。
1 |
|
#Split 操作
将 的路径单独抽成一棵 Splay。
1 |
|
#Link 操作
在 节点和 节点之间连一条边,使其成为同一棵树内的两个节点。
1 |
|
#Cut 操作
切断 和 之间的路径。
1 |
|
#代码
1 |
|
1 |
|
#参考资料
- 平衡树 & LCT,石家庄市第二中学信息学奥赛集训(线下授课),张闰清,2022 年 7 月 12 日。