LINK-CUT-TREE!

来源:互联网 发布:网络登山鞋 编辑:程序博客网 时间:2024/05/22 12:57

lct相关

前导知识 势能分析

势能分析前导条件

需要分析的条件必须存在路径无关性从三楼跳楼是否从窗户冲出去摔到地上一样痛

bzoj 2321 星器

利用任意两点之间存在的能量转化为在直角坐标系内的表示乱搞一通

对lct的简单理解:

把一堆用splay维护的链挂在一起

lct子树操作:

利用lct中splay与fa维护树的结构&&子树值

lct存储边权:

把边理解为点这么naive的方法怎么装B

强行在每个点上存储前后边太麻烦了写不来

总之就是我不会

例题

bzoj3150首都

每次暴力移动重心

奇技淫巧:利用随机异或和判断是否为同一路径,类似哈希

bzoj3637

单独维护黑、白森林

共价大爷游长沙

异或判断路径

重组病毒

lct维护子树大小

总结

汇总一下:
siz:LCT子树大小
Siz:虚子树大小
SIZ:splay上子树大小
v:颜色
lv,rv:splay子树中最左端和最右端的颜色
cols:splay子树在原树上代表的链的颜色段数
coll,colr:LCT子树里的所有的点都在原树里走到x的splay子树里最左(右)的点所经过的颜色段数和
Col:x的虚子树中所有点在原树上都走到x所经过的颜色段数和
sCol:如果x被染成了新的颜色,在计算x的Col的过程中,由于x在原树上的儿子与x颜色相同而没有被计算的颜色段数量
sumsCol:x的splay子树内所有点的sCol值之和
sumCol:x的splay子树内所有点的Col值之和

bzoj3195

单独利用一颗splay维护权值

弹飞大爷

对于环强行续掉一条边,然后打标记变成和谐的树

毒瘤动态图

维护两个值 用n个splay维护邻接矩阵一个Gi表示所有权值为Gi的边的联通子图(这个图的任意联通子图大小小于等于2的i次方),再用一颗lct维护当前权值的最小生成树

查的时候直接在最大的一棵树查,加边的时候直接加在最大一层(第log层的子图)表示备选

删的时候直接干掉这条边,然后依次考虑更丑的边是否可以被选入维持连通性

可以理解为为了维护整个班的和谐,把本来不是cp的cp强行安排成一对,然后维持整个图的连通性

ETT

实际上就是回溯时也入队的dfs序,然而回溯时入队为负值,利用一个ETT可以维护整个树的形态,然后ETT又是一个dfs序列,她将一棵树离散到了一个序列上,因此我们又可以挂一点数据结构维护这个序列(如平衡树)

bzoj4825 维护二叉树ETT

bzoj3786

利用ETT序用类似于dfs序的结构维护到跟的数据

ETT维护到跟路径的特性

由于ETT的特性,在任意一个点前面所有不在到跟路径上进而已经回溯过的点都必然已经正负相抵,因此可以维护每个点到跟的路径

自己写lct出的锅:

1.强行把链上父亲和lct父亲分开,实际上这两个是同一个变量,利用她父亲的儿子是否有她来判断是否是lct的跟

2.makesure的时候一定要用同上的判断,否则会超时!!!

3.注意接边的时候是把一个点转到跟,另一个点作为这个点的父亲

4.切边的时候就splay完了就是断儿子就好了

差不多就是这么多了

原创粉丝点击