LCT(link-cut-tree)入门

ps:由于博主的qwq,把很多实边写成了实链,大家就将就着看吧嘿嘿。

LCT,全称动态树,用于应付不断地加边删边的树的一种算法,非常非常优秀。

因为其经典操作link和cut而被叫做link cut tree(是吗??猜的)

emm  link:链接,cut:砍掉(滑稽)

现在我们开始。(先声明LCT维护的是一个森林哈!)

引入:仨链剖分

我们一般提到的三种剖分是:重链剖分,实链剖分,和长链剖分。

前面我们已经讲过的树链剖分实际上就是重链剖分的别称。长链剖分不太常用(但是sslz_fsy非常强三个都会orz),而本次LCT用到的就是实链剖分。

实链剖分

这个不需要特别学习,你只需要知道这种剖分的优点在于:可以调整,即可以变化。(不像重链剖分那样是固定的)

同样,每个节点对儿子只有一个实链,其它都是虚链。这样做的原因是方便splay来维护。(后话)

它的体现是:所有子节点都有father,但father的son只有实链链接的子节点或者原树上的父节点。意思是说你从叶子节点可以一直跳跳跳跳到根节点,每个叶子节点都可以,但对于一个根节点往下走,它的路径是唯一的。

接下来我们说一下,splay在树里面的运转方式。

splay

首先明确:每一个splay维护的是一个深度严格单调递增的链(简单说就是一个严格从祖先到后代的链)。用实链连接起来的一堆点在同一个splay里面。所以整个森林实际上也有很多个splay。

所以说实边虚边在LCT中的体现实际上就是在不在一个splay里面。

每个splay结点维护的值是其在splay中的整个子树的信息和。(比如取最大最小啦,求和或者异或啦)

因为维护的是信息和,所以在作修改的时候为了不影响到别的点,你要先splay上去。

这样就方便我们调用。至于为什么方便,我也说不清楚(手动滑稽)。

基本函数学习

1.access

access函数是非常基本的函数。非常重要。它的意义是:将该点到根节点的这个路径上的所有链变成实链。

这句话的潜含义有二。

1.因为每个点只有一条向下的实链,所以实际上它是将一些实边转换成了轻边,然后硬生生的把一些虚边变成了实边。

2.因为splay维护实边连接起来的点,所以现在,根节点到该节点路径上的所有点包括它们二位都在一个splay里面了。

既然在一个splay里面了,那,就

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值