【学习笔记】【算法】【施工ing】LCT

定义

动态树是一类要求维护森林连通性的问题。例如,在传统树链剖分的题目上加上删边与添边的操作,这使得树是动态的。

LCT 是解决动态树问题的算法的一种,其所做的是类似于重链剖分的“实链剖分”,树链剖分的儿子是始终固定的,而 LCT 则是会虚实变换,没有固定的实儿子,也没有划分标准,因此要使用比线段树之类更灵活的 Splay 来维护。因此,LCT = 树链剖分思想 + Splay。

因此,LCT 可以完成一切树链剖分的题目,属于是树剖上位了(

引入

引入 LCT 的一些概念。

  • Preferred Child:实儿子,实儿子和父亲同属一个 Splay,且一个节点至多只能有一个实儿子。
  • Preferred Edge:实边,链接实儿子和父亲的边。
  • Preferred Path:实链,由实边和实边连接的节点构成的一条链。

同时,我们还需要构造一些辅助树。

  • 由一条实链上的所有节点所构成的Splay称作这条链的辅助树。
  • 每个点的键值为这个点的深度,即这棵Splay的中序遍历是这条链从链顶到链底的所有节点构成的序列。
  • 在辅助树上的根节点的父亲就是链顶的父亲节点,但根节点不一定是链顶。

辅助树的每一条实链都用一棵 Splay 来维护。如下图:

image

基本操作

Access

作用为让点 x 到根节点的路径上的所有边变为实边,形成一条实链。主要作用是让这一条路径上的所有点形成一个 Splay,以便于操作或者查询。

先去补 Splay,咕了

posted @   ayaka0928  阅读(20)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示