LCT哲学-个人总结

i207M

2018-11-13 10:42:26

Personal

## 个人理解 LCT其实也是一个暴力的数据结构,可以快速维护链的信息。得益于splay的灵活性,LCT也具有灵活的动态结构。求解的方法非常暴力:makert(x), access(y), splay(y);这时,$x\to y$链上的信息就在y那里了。 由于使用的是splay,所以维护的信息需要能够快速合并。 ## 弹飞绵羊 这道题,是一个精简版lct,而且不能进行makeroot操作,所以很多操作都不太一样, ![](https://cdn.luogu.com.cn/upload/pic/43388.png) 尤其注意,在断边时,x父亲在x的左子树里,但不一定是左儿子!所以修改时需要$fa[ch[x][0]]=0$不是$fa[y]=0$ 准确的说,y在x的左子树的最右点,如果非要$fa[y]=0$,需要先access(y),使y会独自在x的子树里。 ## 水管局长 套路:删边变成加边,然后用LCT找到当前最小生成树上的最长边,替换掉。 如何使边权变为点权?为每个边新建一个点即可。 这道题,我最初用了一种把边按时间排序的方法来做,应该是哪个细节写错了,导致挂了。 ### 最小差值生成树 对于生成树,我们难以进行删边操作,比较方便的是加边操作,所以我们每次移动右端点,加入一条边,去掉环上的最小边,左端点跟着动就是答案。 ### 魔法森林 把边按a排序后维护b的最小生成树,注意这道题的自环会RE。 ## 星球联盟 这个单独写一篇。 # LCT维护子树信息 这个也单独写一篇。 ## BZOJ 3514 ~~做这道题的时候,调LCT死循环调傻了...最后发现是会有自环的情况,这个时候一定要特判!~~ N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。**强制在线** 一眼看上去很神仙的题。因为强制在线,总是让人忽略了离线的方法。我们考虑扫描线的思想,对于每个r,维护最大生成树。而树的联通块个数=点数-边数。所以问题就转化为了询问最大生成树上的边,边权在$[l,r]$的数量——我们可以使用主席树!同时,通过可持久化,我们可以很方便的应对强制在线的情况。 ### BZOJ 2555 SAM+LCT维护子树信息。 ### P4721 [USACO18FEB]New Barn 这道题有很多比较水的做法,但是LCT的做法比较值得思考——而且还支持删边。 我们Splay上维护信息$f[i]$表示点i的Splay子树里,深度最小的点到点i的Splay子树(可通过虚边,用可删堆维护轻儿子)的最远点的距离。转移分别讨论从左儿子,右儿子和自己转移即可。注意,因为要支持reverse操作,需要同时维护一个完全相反的标记。