LCT(Link Cut Tree)总结
概念、性质简述 首先介绍一下 链剖分 的概念 链剖分,是指一类对树的边进行轻重划分的操作,这样做的目的是为了减少某些链上的修改、查询等操作的复杂度。 目前总共有三类:重链剖分,实链剖分和并不常见的长链剖分。 重链剖分 实际上我们经常讲的树剖,就是重链剖分的常用称呼。 对于每个点,选择最大的子树,将这条连边划分为重边,而连向其他子树的边划分为轻边。 若干重边连接在一起构成重链,用树状数组或线段树等静态数据结构维护。 这里就不赘述; 实链剖分 同样将某一个儿子的连边划分为实边,而连向其他子树的边划分为虚边。 区别在于虚实是可以动态变化的,因此要使用更高级、更灵活的Splay来维护每一条由若干实边连接而成的实链。 基于性质更加优秀的实链剖分,LCT(Link-Cut Tree)应运而生。 LCT维护的对象其实是一个森林。 在实链剖分的基础下,LCT资磁更多的操作 同样将某一个儿子的连边划分为实边,而连向其他子树的边划分为虚边。 区别在于虚实是可以动态变化的,因此要使用更高级、更灵活的Splay来维护每一条由若干实边连接而成的实链。 基于性质更加优秀的实链剖分,LCT(Link-Cut Tree)应运而生。 LCT维护的对象其实是一个森林。 在实链剖分的基础下,LCT资磁更多的操作 查询、修改链上的信息(最值,总和等) 随意指定原树的根(即换根) 动态连边、删边 合并两棵树、分离一棵树