首页 > 其他分享 >树链剖分

树链剖分

时间:2023-06-30 21:57:05浏览次数:34  
标签:剖分 树链 重子 LCA 重链 节点

P3379 【模板】最近公共祖先(LCA)

本题中的树链剖分均指重链剖分。

这里不使用重链剖分作为模板是因为这道题更加典型,不需要使用额外的数据结构,就是纯天然、无污染的树剖(我诗兴大发喝多了)。

首先,树剖是一个思想,可以将树上两点路径的问题转变为一个序列上,不超过 \(O(\log n)\) 段的问题,这就给了树状数组、线段树等一系列数据结构解决树上路径问题的方式。

切入正题,树剖到底是什么呢。

直接上图

重子节点为其父节点的子节点中中子树大小最大的节点(有一样的选一个即可),轻子节点为除其父节点的重子节点外的其他子节点。重边指下面连接重子节点的边。轻边则为除重子节点外的边。

重链就是由若干段连续重边组成的路径。

然后我们再做一遍 dfs,优先遍历每个点的重子节点,然后可以得到右边图的 DFN 序。这样遍历保证了每段重链上的点的编号均连续。

又有一个定理:对于树上任意一条路径,都能拆分成 \(\log n\) 条重链。

因为你只要走一条轻边,那么子树大小至少减小一半,而每进入一条重链都需要走一条轻边,所以就是 \(O(\log n)\) 的复杂度。

对于本题,尽管求的是 LCA,我们一般用朴素的倍增算法求解,但是也可以使用树链剖分(常数更小)。

对于两个点,每次优先让所在重链顶端的点深度更深者跳到重链顶端的父亲。然后直到两者在一条链上停止。最终深度较小者为 LCA

简单证明的话,只要两个点不在一个重链上,那么肯定没有到达 LCA,而一旦汇合,那么这个点肯定是第一个汇合的点(因为本来在两条链上,你突然有一个点跳到了另外这条链上,那么第一个汇合的位置就是这里了)。

尽管代码稍微比倍增写法长,但是好写常数小。

代码

标签:剖分,树链,重子,LCA,重链,节点
From: https://www.cnblogs.com/wscqwq/p/17517881.html

相关文章

  • 【代码仓库】【模板】树链剖分
    #include<bits/stdc++.h>#definerep(i,a,b)for(inti=(a);i<=(b);i++)#definepre(i,a,b)for(inti=(a);i>=(b);i--)#defineEde(i,u)for(inti=h[u];i;i=ne[i])#definego(i,a)for(autoi:a)//#defineintlonglong#def......
  • 【学习笔记】(18) 长链剖分
    长链剖分1.算法简介与性质长链剖分本质上就是另外一种链剖分方式。长链剖分与重链剖分有相通之处,后者是将子树大小最大的儿子作为重儿子,前者则是将子树深度最大的儿子作为重儿子。可见两者只是换了一个剖分形式。长链剖分有如下性质:性质1:每个节点所在长链末端为其子树......
  • HDU3966(树链剖分)
    题目:Aragorn'sStory 题意:给一棵树,并给定各个点权的值,然后有3种操作:IC1C2K:把C1与C2的路径上的所有点权值加上KDC1C2K:把C1与C2的路径上的所有点权值减去KQC:查询节点编号为C的权值 分析:典型的树链剖分题目,先进行剖分,然后用线段树去维护即可,注意HDU的OJ采用Windows系统,容易......
  • 4543: [POI2014]Hotel加强版[树形DP+长链剖分]
    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4543 解题思路:长链剖分定义:f[i][j]表示以i为根节点的子树,有多少个节点和i的距离是j的.g[i][j]表示以i为根节点的子树,在子树外一个距离i为j的点可以跟i子树内的两个点组成两两相等的方案数.那么就有:f[u][j+1]+=f[v......
  • 树链剖分
    前言以下内容大多摘抄自董晓算法前置芝士相关定义重儿子:父节点的所有儿子中子树结点数目最多的结点轻儿子:父节点中除了重儿子之外的儿子重边:父结点和重儿子连成的边轻边:父结点和轻儿子连成的边重链:由多条重边连接而成的路径前置数组含义\(fa[u]\):存\(u\)的父节点\(......
  • 树链剖分
    我不会做ppt/ll先来看一棵树:树剖的经典问题:两种操作,一种是将点\(u\)到点\(v\)路径上所有点加上一个值;第二种是查询路径\(u\)到路径\(v\)的点权之和。显然,普通的树上差分已经无法解决这种问题了。于是我们需要一种预处理来降低复杂度。区间修改,这肯定用到线段树,但是......
  • Delaunay三角剖分——BW算法
    Delaunay三角剖分定义在数学和计算几何中,对于给定的平面中的离散点集P ,其Delaunay三角剖分DT()满足:空圆性:DT(P)是 唯一 的(任意四点不能共圆),在DT(P)中,任意 三角形的外接圆范围内不会有其它点存在。最大化最小角:在点集P 可能形成的三角剖分中,DT(P)所形成的三角形......
  • B. 染色(树链抛分)
    B.染色-树链剖分-比赛-衡中OI(tg.hszxoj.com)题目描述原题来自:SDOI2011给定一棵有  个节点的无根树和  个操作,操作共两类。将节点  到节点  路径上的所有节点都染上颜色;询问节点  到节点  路径上的颜色段数量,连续相同颜色的认为是同一段,例如 1......
  • hdu:How far away ?(树链剖分)
    ProblemDescriptionTherearenhousesinthevillageandsomebidirectionalroadsconnectingthem.Everydaypeolealwaysliketoasklikethis“HowfarisitifIwanttogofromhouseAtohouseB”?Usuallyithardtoanswer.Butluckilyintthisvilla......
  • 树链剖分学习笔记
    一棵树,支持:路径加单点查询一般树上链的问题使用树链剖分解决。重链剖分前置知识LCA,线段树定义重儿子:所有儿子中子树最大的儿子为重儿子重边:重儿子之间的连边重链:若干重儿子连成的链性质一棵树可以被剖成若干重链。优先遍历重儿子,所有重链的dfs序连续。重链数量不......