专题总结:动态树 LCT(Link cut tree)

HUST开的一套动态树专题,全是经典题:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25242#overview


先说一下什么是动态树。动态树可以维护一个动态的森林,支持树的合并(两棵合并成一棵),分离(把某个点和它父亲点分开),动态LCA,树上的点权和边权维护、查询(单点或者树上的一条路径),换根。

这里首先推荐杨哲的集训队作业:http://wenku.baidu.com/view/75906f160b4e767f5acfcedb 这里面对动态树的基本操作介绍比较全面,同时还带有相关证明。

看完论文以后,这里以HDOJ4010为例对LCT作个说明。

本题有四种操作:

1、如果x和y不在同一棵树上则在xy连边

2、如果x和y在同一棵树上并且x!=y则把x换为树根并把y和y的父亲分离

3、如果x和y在同一棵树上则x到y的路径上所有的点权值+w

4、如果x和y在同一棵树上则输出x到y路径上的最大值

非法则输出-1

根据YZ的作业,access是所有动态树所有操作的基础,一次access(u)操作会把从点u到根上的所有点按深度用一棵splay维护,左边比根深度小,右边比根大,那么要提取x到y的路径只要把x换成根再access(y)就可以,换根操作可以先access(x),splay(x)再把整棵splay翻转,因为splay(x)以后在splay上x的右子树是空的,翻转以后x就是深度最小的点,也就是根,这里的翻转可以打懒惰标记,同样,维护链上的和、极值也可以用同样的方法维护。

这样的话所有操作就是先access,再splay


文库:

LCT http://wenku.baidu.com/view/a611cec4dd3383c4bb4cd2d8.html

       http://wenku.baidu.com/view/61d02af54693daef5ef73d84.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值