[ACM]Link-Cut Tree实现动态树初探

Posted mcflurry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ACM]Link-Cut Tree实现动态树初探相关的知识,希望对你有一定的参考价值。

动态树问题是指的一类问题,而不是具体指的某一种数据结构。它主要维护一个包含若干有根树的森林,实现对森林的修改和查询等。

实现动态树的数据结构据说主要有4种,Link-Cut Tree是其中的一种。Link-Cut Tree可以看作是所求森林的一个映射,二者的映射关系将在后面讲述。

先说Link-Cut Tree支持的基本操作包含:

1.(access)Link-Cut Tree的核心操作,后面的操作都需要access这个操作的支持。

2.(make)在森林中建立一棵树。

3.(findroot)查询森林中某一棵树的根。

4.(cut)将某个节点从当前的树中分离,也就是一棵树分成两棵树。

5.(link)将2棵根不相同的树合并,也就是把两棵树合并成一棵树。

通过上述基本操作,就能够实现动态树的一些基本问题。需要注意的是,Link-Cut Tree只实现了节点到根的操作,不过我们可以通过修改基本操作实现一些点到点的操作,如求LCA,具体过程会在后文中讲述。

再来说说Link-Cut Tree的数据组织,在说Link-Cut Tree的数据组织之前应该先细说一下Link-Cut Tree的核心操作access(u),这样有助于理解。

access(u)是访问u节点操作(从u访问到根),实际上是寻找u节点到根节点的路径。如果只是简单的向上回溯寻根,那么遇到链很长的树时,时间复杂度将会退化成线性。Link-Cut Tree采用伸展树这种数据结构,将向上访问的父节点加入伸展树中

以上是关于[ACM]Link-Cut Tree实现动态树初探的主要内容,如果未能解决你的问题,请参考以下文章

LCT一步步地解释Link-cut Tree

Link-Cut Tree

沉迷Link-Cut tree无法自拔之:[BZOJ3669][Noi2014] 魔法森林

以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)

沉迷Link-Cut tree无法自拔之:[BZOJ2594][Wc2006]水管局长数据加强版

BZOJ4530大融合(Link-Cut Tree)