LCT

1 概述

首先我们需要知道一类问题,在这类问题中我们需要维护一个森林,支持加边和删边操作,然后要求维护树上的一些信息。这类问题称为动态树问题。

而 LCT,即 Link-Cut Tree,就是用于解决动态树问题的一种数据结构。

学习 LCT 之前需要对 Splay 这种平衡树有一定了解,当然两者在细节上还有一些差别。

2 实链剖分

我们先来看看如果不要求动态加边删边怎样做。假如给出一道这样的问题:

  • 修改一个点的点权。
  • 查询路径 \(x\to y\) 上点的点权异或和。

显然这个问题可以轻松用树链剖分解决掉。接下来我们加入加边删边操作之后普通的树链剖分就难以维护了,原因就在于树结构改变的同时树链剖分出来的重链也会改变。

考虑树剖维护链上操作的本质,我们其实就是给同一条重链上的点赋上连续的 \(\text{dfn}\) 编号,并且保证每个点到根节点经过的重链数量是 \(O(\log n)\) 级别的,然后再利用其他数据结构维护。

在动态树问题中,我们困难的地方就是对树时刻维护这样的链,上面已经说过树剖难以维护,所以我们更希望这个重链是由我们自行决定的。换句话讲,我们希望对每个节点自行指定重儿子和轻儿子然后进行维护。

这种划分方式就被称为实链剖分,而我们自行指定的儿子叫做实儿子和虚儿子(需要注意的是一个点不一定必须有实儿子)。然后整棵树就可以被划分成若干实链,接下来我们就需要利用 Splay 去维护每一条链。

然后我们就需要考虑怎样去维护这些链,我们还需要引入另一个东西。

3 辅助树

辅助树实际上就是维护每条链的 Splay 之间通过某种方式相连形成的树结构。可以理解为 Splay 维护的是每一条实链,而辅助树维护的就是一棵树;将一些辅助树放在一起就构成了 LCT,用于维护整个森林。

现在我们来看辅助树的性质:

  • 辅助树有多个 Splay 组成,每个 Splay 维护原树的一条实链,且 Splay 的中序遍历对应实链从上到下的点。
  • 辅助树上的 Splay 通过如下方式连成一棵树:对于一棵 Splay,其根节点的父亲指向其对应维护的实链的链顶的父亲。同时对于我们指向的这个点,我们仍然让它在辅助树上的儿子为空,以此表示这条边是虚边。也就是说,所有的虚边都是认父不认子的。
  • 原树上的操作均可以转化为在辅助树上操作,所以接下来我们只需要考虑在辅助树上的操作即可。

举个例子,对于如下所示的原树:

其辅助树结构可能如下(显然这个结构会随 Splay 形态变化):

然后我们来看一下原树和辅助树的关系:

  • 原树的实链都在辅助树的同一个 Splay 中。
  • 原树的虚边由儿子所在 Splay 的根节点指向父亲,但是这个点不指向根节点。
  • Splay 上最多有两个实儿子,但是可能会有很多虚儿子。
  • 原树的根不等于辅助树的根;原树上的父亲指向不等于辅助树上的父亲指向。

接下来就可开始实现 LCT 的基本操作了。

4 具体实现

4.1 Splay 基本操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git整体使用流程

一、场景说明本地有文件 想在github创建一个远程仓库 在本地修改,同时同步到远端二、流程设置用户名和邮箱目的:标识每次提交者的身份 设置全局用户名:git config --global user.name "Your Name" 设置全局邮箱:git config --global user.email "your.email…

【Linux性能】Linux 下利用 Valgrind 进行内存调试

一、概述 Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使用未初始化的内存、非法内存访问等问题。它在 Linux 平台上广泛使用,并且支持下多种处理器架构。 二、Valgrind 的使用 2.1 基本格式 valgrind --tool=memcheck -–…

C#/.NET/.NET Core技术前沿周刊 | 第 21 期(2025年1.6-1.12)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

26. 文件操作

一、数据读写在 PySide6 中对文件和文件夹的进行操作时,主要使用 QFile 类、QFileInfo 类和 QDir 类。我们可以在终端中使用 pip 安装 pyside6 模块。 pip install pyside6在 PySide6 窗口程序对文件或者文件夹进行操作时,不强制要求必须使用 PySide6 中提供的 QFile、QDir 等…

MySQL基础函数使用

DQL中的函数 # 官方函数链接 https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format4.1 单行函数函数都是数据库提前给我们准备好的,所以我们可以直接调用,使用函数可以让指定的列计算出我们需要的数据 单行函数 : 指的是操作一行数据…

【模拟电子技术】06-双极晶体管的结构与放大原理

【模拟电子技术】06-双极晶体管的结构与放大原理图(b)中我们可以看到三个区的分类,发射区之所以为发射区是因为掺杂浓度高,才能发射电子出去。而集电区掺杂浓度低,就好比我们想让一个房间当作仓库,那么它的空间肯定要大,里面原本不能是放了很多东西。下图NPN晶体管中发射…

地平线Vision Mamba:超越ViT,最具潜力的下一代通用视觉主干网络

• Vision Mamba 论文链接: https://arxiv.org/abs/2401.09417 • 项目主页: https://github.com/hustvl/Vim 简介 本文的工作Vision Mamba[1]发表在ICML 2024。研究的问题是如何设计新型神经网络来实现高效的视觉表示学习。该任务要求神经网络模型能够在处理高分辨率图像时既…

1.11日报

今天确定了外包杯的队友,但还没想好主题。阅读了开学测试的内容 一开始还没什么头绪

蔡磊:刘强东一直在为我兜底,纵使不胜也绝不屈服

时钟滑到了2025年,蔡磊患病的第五年。自从2024年5月那次感冒把他送进了重症监护室,他的身体机能开始断崖式下降。 但他仍在与生命抢时间,每天从早晨9点到晚上11点排满工作,并制定了2025年规划,虽然一切结果未知,但希望总是在一点点增加。 把冰洞凿得更大一些 如果不是蔡磊…

【专题】2025年节日营销趋势洞察报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=38813 在当今复杂多变且竞争激烈的消费市场环境下,节日营销已成为企业获取市场份额、提升品牌影响力的关键战略时机。我们深知深入洞察节日营销趋势对于企业决策的重要性。 本报告汇总基于对 2024 年多个关键消费节点及消费者行为的深度调研…