当前位置: 首页 > news >正文

树链剖分 I

树链剖分 I

摘要:本文介绍了树链剖分并给出若干例题的解法。

关键词数据结构 树论 树链剖分 线段树

记号与定义

本博客中:

  • 树是一个 \(n\) 个点 \(n-1\) 条边的无向连通图。
  • 定义 \(u\)\(v\) 相邻为 \(u\)\(v\) 有边。
  • 记一条从 \(u\)\(v\)无权边为 \((u,v)\)
  • 记一条从 \(u\)\(v\)\(w\) 边为 \((u,v,w)\)
  • 定义对于一个有根树,点的深度为其到根节点的距离
  • 定义对于一个树,树的大小为树的节点个数。
  • 定义树上两个点的距离为树上两个点的唯一路径经过的边个数,\(u\)\(v\) 的距离记为 \(\text{dis}(u,v)\)
  • 定义 \(u\)\(v\) 的父亲,当且仅当在有根树中,\(u\)\(v\) 的父亲的充分必要条件是满足 \(d_v=d_u+1\)\(v\)\(u\) 相邻。
  • 定义 \(u\)\(v\) 的祖先为,通过不断的让 \(v\) 等于自身的父亲,可以让 \(u=v\)。特别地,\(u\)\(u\) 的祖先。
  • \(u\)\(v\) 的后代,则 \(v\)\(u\) 的祖先。
  • 定义 \(u\) 的子树为所有 \(v\),且 \(u\)\(v\) 的祖先的点与除了 \(u\) 以外的 \(v\) 与其父亲的边构成的树。
  • 定义 \(u\)\(v\) 的祖先,当且仅当 \(u\)\(v\) 的父亲相同。
  • \(w\)\(u,v\) 的祖先,则 \(w\)\(u\)\(v\) 的公共祖先。特别地,所有 \(u\)\(v\) 的祖先中深度最大的是 \(u\)\(v\)最近公共祖先,若 \(w\)\(u\)\(v\) 的最近公共祖先,记 \(\text{LCA}(u,v)=w\)

算法

引入

我们知道维护序列上的很多信息可以使用线段树,比如区间加与区间求和等。

当序列问题转化到树的路径上时,考虑以下题目:

  • 树上有 \(n\) 个点,每个点的初始点权均为 \(0\)
  • 操作:对于 \(u\)\(v\) 的路径,每个点的点权加 \(w\)
  • 询问:求 \(u\)\(v\) 的路径上的点权和。

剖树为链

我们思考,我们是否可以把树的问题转化到序列上,序列上的解法是已知的线段树

我们发现对于一棵树,是可以看作一个序列进行操作的,这启发我们将树转化为链。实际上,最朴素的做法即为将树剖成了 \(n\) 个长度为 \(1\) 的链,时间复杂度 \(O(qn)\)

我们可以一次性对于单链上实现 \(O(\log n)\) 的复杂度,这启发我们把树剖分成尽可能少的链。

剖分方法

树链剖分有很多种剖分方法,注意到链的个数等于链的顶端的点的个数。因此我们要让点尽可能地被加进里。贪心地,我们把 \(u\) 的儿子中子树大小最大的加入到 \(u\) 所在的链中。其他的儿子均作为新的链顶端。我们将这种链剖分方法称为重链剖分

性质

维护

实现

http://www.jsqmd.com/news/155982/

相关文章:

  • english-12-word-25-12-28, on a healthy kick 热衷于健康的生活方式 ,没想到吧除了 kick you还有如此表达
  • Mysql 有buff_pool 为什么在很多场景下还要使用redis缓冲热点数据
  • MySQL 8.4.7版本下载安装详细教程(Win11环境)
  • CNN过拟合解决方案:PyTorch实现早停机制
  • 2025年南通汉科新能源热处理技术盘点:金属冲压件渗碳氮化等十大工艺实力解析,厂家哪家好权威推荐 - 品牌企业推荐师(官方)
  • Springboot图书借阅管理系统bh5st(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 2025.9.28社团管理系统
  • LINUX应用编程 第三十一章 CMAKE 进阶 学习笔记(3) cmake 进阶
  • Springboot图书阅读与推荐系统wlxpk(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 开发体验的华丽转身
  • Anaconda更换清华源后仍无法安装PyTorch?原因解析
  • LINUX应用编程 第三十一章 CMAKE 进阶 学习笔记(2)CMakeLists.txt 语法规则
  • 当AI开始“重构”我们的代码与工具
  • SSH公钥私钥生成与部署完整指南
  • [特殊字符]天津超火!前台设计装饰公司揭秘✨
  • sy7
  • 年份进化又不带我?
  • 如何在NVIDIA显卡上运行PyTorch模型?这个镜像直接开跑
  • HuggingFace镜像网站推荐列表:国内高速下载大模型参数
  • Thinkphp_Laravel框架开发的vue在线问卷调查系统痕迹
  • PyTorch GPU环境配置避坑指南:常见错误及解决方案汇总
  • 【计算机毕业设计案例】基于SpringBoot的工厂供应链管理系统的设计与实现(程序+文档+讲解+定制)
  • secure crt使用ssh密钥登录提示未知文件格式
  • Markdown数学公式编写:用于描述PyTorch损失函数推导
  • Django Auth:深入理解与最佳实践
  • GDKOI2025游记
  • Thinkphp_Laravel框架开发的vue智慧办公hr招聘辅助管理系统
  • 【题解】Atcoder Beginner Contest 437(ABC437) A~E
  • 学期回顾随笔_102301412_章鸿晨
  • CSS 颜色