首页 > 其他分享 >浅谈树链剖分—轻重链剖分

浅谈树链剖分—轻重链剖分

时间:2023-10-07 20:22:09浏览次数:35  
标签:链剖分 浅谈 剖分 儿子 重边 节点 轻重

闲话

似乎会有很多种树剖,什么长链剖分之类的,但是暂时只会轻重链剖分(可怜)。
以前的版本在这里,但是感觉写的太粗糙了,所以决定重写一篇(我也不知道为什么要一直写树剖而不写点别的)。

正文

引入

如果给出一个序列,有一些区间修改查询之类的操作,直接上线段树什么的就完事了,但是如果给出的是一棵树呢?显然没有办法直接维护。那么既然我们可以做序列,为什么不把树按照一定的顺序变成序列呢?这就是今天的主角——轻重链剖分,当然你也可以说是树链剖分,按照轻重链划分的方法只是其中一种。

轻重链剖分

定义

在介绍具体的算法流程前,我们需要明确一些定义:

  • 重儿子:对于每一个非叶子节点,它的子节点中,子树大小最大的那个子节点被称为重儿子。
  • 轻儿子:对于每一个非叶子节点,除了重儿子以外的子节点都是它的轻儿子。
  • 重边:任意两个重儿子以及重儿子和其父节点之间的连边称为重边。
  • 轻边:除去重边剩下的边。
  • 重链:多条(\(\geq 1\))重边相连组成的链即为重链,且重链一定以轻儿子为起点。
  • 此外,若一个叶子节点是轻儿子,那么它也可以视为一条重链。

这些就比较形式化了。具体到代码中,我们需要

标签:链剖分,浅谈,剖分,儿子,重边,节点,轻重
From: https://www.cnblogs.com/LHLeisus/p/qian-tan-shu-lian-pou-fen-qing-zhong-lian-pou-fen.html

相关文章

  • 浅谈 Java 程序运行
    JVM是如何启动的?配置JVM装载环境解析虚拟机参数设置线程栈大小执行JavaMain方法内存是如何管理的?JVM内存模型程序运行视角下的Java内存管理此处所说的JVM内存模型是一种通用逻辑模型,与具体的虚拟机实现无关,虚拟机可以根据实际情况基于通用逻辑模型,给出不同的......
  • 浅谈概率论
    浅谈概率论说句鲜花:明天就是月考,马上就是csp。但是不想学有用的东西,就写了这篇博客。严格数学公理体系:(水平不够,暂略)贝叶斯公式:定义\(P(A|B)\)为发生\(B\)事件下发生\(A\)事件的概率。则有\(P(A|B)=\dfrac{P(B|A)P(A)}{P(B)}\)证明:由于\(P(A|B)P(B)=P(B|A)P(A......
  • 树链剖分
    前言:本人太弱了,看着题解调了一下午,才A了树剖的板子题,所以写篇博客纪念一下(其实是怕自己忘了树剖怎么做)。本文以板子题为例子定义:树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个于且只属于一条链,然后再通过数据结构(树状数组、BST、SPL......
  • 浅谈关于LCA
    prologue本身只会tarjan和倍增法求LCA的,但在发现有一种神奇的\(O(1)\)查询lca的方法,时间优化很明显。mainbody倍增法先讨论倍增法,倍增法求lca是一种很常见普遍的方法,这里直接放代码了,其本身的内核就是让较低点每次都跳$2^k$步,如果跳的比另一个高了,就不跳那......
  • [学习笔记] 树链剖分
    叫复习笔记或许更好。树链剖分就是把树剖成链去解决一些问题。定义重子节点:子节点中子树大小最大的节点。轻子节点:除重子节点外的其他子节点。重边:到重子节点的边。轻边:到轻子节点的边。记号\(dfn[x]\):DFS序,也是在线段树中的编号。\(son[x]\):重子节点。\(dep[x]\)......
  • 浅谈一致性哈希Consistent Hashing
    目录1.一致性哈希定义2.工作原理3.应用场景4.使用一致性哈希的软件5.一致性哈希的开源实现6.一致性哈希的不足本文主要介绍一致性哈希的定义、原理,以及应用场景等内容。1.一致性哈希定义一致性哈希(ConsistentHashing)是一种特殊的哈希技术,主要用于解决分布式系统中的数据分布......
  • 浅谈数据结构栈与队列
    栈1.栈的基本概念栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。不能插入和删除的一端为栈底(Bottom)栈顶(top):线性表允许进行插入删除的那一端栈底(bottom):固定的,不允许进行插入和删除的那一端空栈:不含任何元素的......
  • 浅谈一下原型继承中我对原型链的理解
    在学习JS语法中,我知道了任何一个类都拥有一个原型对象prototype,这个内置对象的好处在于不用每次new对象时都为对象开辟一个内存空间指向函数,可以使所有实例化对象共享一个属性。但是在JS中的继承却和其他语言有些差异。今天学习了原型继承之后,先给大家看一下基本的代码。 首......
  • 浅谈数学性质与数据结构
    交换律:当式子具有交换律时,我们可以考虑序列颠倒做两遍,算多了整体除二,强制钦定顺序等手段,优雅的解决这类问题。https://codeforces.com/contest/1635/problem/F 结合律:当发现维护的内容,存在结合律时,可以考虑线段树维护(需要支持信息快速结合),静态问题可以考虑猫树 重复消去......
  • 浅谈UE4的序列化
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、结合用例浅谈UE4序列化1.1需求我写文章,不爱一上来就讲道理、贴代码,而是喜欢先提需求、提问题,然后围绕这个需求的实现再一步步挖掘源码。我们......