Link-Cut-Tree详解

发布时间 2023-06-05 18:06:53作者: 白简·

引入

树的链剖分有三种,重链剖分、实链剖分和长链剖分。

实链剖分与其他两种不同的是,实儿子是可以根据需求转换的,而不是像另两种有着固定的定义方式。

因此,实链剖分一般用来维护动态的树上问题。

例如删边、加边和修改点权,以及树链剖分的常规操作(当然,要始终维持森林的性质)。

辅助树

\(\text{Link-Cut-Tree}\) 维护的是一个森林,我们应用 \(\text{Splay}\) 来维护实链。

我们可以定义一个实儿子,实儿子所在的链叫实链,所有的实链都用一棵 \(\text{Splay}\) 来维护。

对于这些维护不连续实链的 \(\text{Splay}\),他们之间其实也不是完全孤立的。

在原树中,实链和实链之间由虚链连接。

那么,在辅助树中,这些维护实链的 \(\text{Splay}\) 之间也连接着。

正常情况下,\(\text{Splay}\) 的根节点是没有父亲的,但是我们现在要把这些维护实链的 \(\text{Splay}\) 连起来,我们就用一种只记父亲,不记儿子的方法,让这一棵 \(\text{Splay}\) 的根节点的父亲指向