常见 LCT 的不详细揭秘。
博主并不擅长动态树相关知识,所以只会总结一点常见的模型,考虑到习题各有风采,所以就不一一给出题解。
下文并没有震撼人心的 Massive Problem,请放心观看。
维护子树信息
LCT 并不擅长维护子树信息,不代表不可以维护子树信息,事实上是只需要额外的数据结构就可以做一些对虚子树信息的简单维护。
CF916E Jamie and Tree
换根,子树加,子树和。
考虑对于虚子树和实子树分别维护标记,但是切换的时候如何维护真实的值呢?
考虑费用提前计算,提前减去来自标记的
P3979 遥远的国度
换根,子树最小值。
注意到最小值只可以使用可删除数据结构维护,每次使用 multiset 来维护最小值即可。
P4695 [PA2017] Banany
和上面类似,实际上是 LCT 维护对称信息的体现。
注意维护左端到右边某个点的最大值和右端到左边的最大值即可。
习题:
- P5649 Sone1
LCT 维护颜色段均摊
常见的模型是对点到根进行染色,这个和 access 是一样的。
但是维护路径颜色段均摊是很吃力的。
P9340 [JOISC 2023 Day3] Tourism
这个答案是虚树边长和 + 1,尝试拆分贡献。
具体想法是维护那些要算上的点:加上子树内有关键点的点、减去虚树的根的所有祖先。
你考虑扫描线
CF1344E Train Tracks
注意到操作类似于 access,而切换儿子类似于虚实链的切换。
我们这样可以离线成若干个问题,有
直接左端点扫描线,然后每次取出右端点最小的那个就好了。
习题:
- P3703 [SDOI2017] 树点涂色
- CF1137F Matches Are Not a Child's Play
- P6292 区间本质不同子串个数
- U504652 我已然缺乏余力仰望星空
LCT 维护生成树 / 连通块
P5385 [Cnoi2019] 须臾幻境
LCT 数生成树的技术引入题。
联通块个数显然就是点数 - 边数。
考虑用 LCT 来扫描线,然后维护编号的最大生成树。这样我们可以求出一条边存在的时间
CF1109F Sasha and Algorithm of Silence's Sounds
考虑维护左端点
那么就是数
考虑对于树这种特殊形态使用森林经典结论
那么我们就可以计算在左端点为
那么我们可以使用线段树维护区间加来维护
P8531 [Ynoi2003] 戌亥彗星
这个东西显然是可以右端点扫描线的。
维护到没有环或者所有度数大于 2 的点全部在环上即可,可以通过 LCT 维护环上
你尝试加入这条边,维护左端点
这个东西就是线段树历史最小值个数和即可即可,时间复杂度是
习题:
- P4764 [CERC2014] Pork barrel
- P9598 [JOI Open 2018] 山体滑坡
- P5526 [Ynoi2012] 惊惶的 SCOI2016
- P9201 「GMOI R2-T4」电子木鱼