树链剖分入门讲解 问题导入 当我们做题目的时候,往往会有一些题目是给定一颗树,并对这颗树做一堆蛇皮怪物般的操作的。 那么,我们要怎么做呢? 这里提供一种思想,就是把树拆掉: 以轻重边为基础的拆边,把一颗树拆成大大小小的几条链放到类似于常用的线段树里面加以操作。 轻重 ...
LCA的类型多种多样,只说我知道的,就有倍增求LCA,tarjin求LCA和树链剖分求LCA,当然,也还有很多其他的方法。 其中最常用,速度最快的莫过于树链剖分的LCA了。 树链剖分,首先字面理解一下,什么是树链剖分。 就是把一棵树剖分为若干条链,然后利用数据结构 树状数组,SBT,Splay,线段树等等 去维护每一 条链,复杂度为O logn 那么,树链剖分的第一步当然是对整棵树进行遍历,预处理 ...
2018-04-15 11:09 0 1431 推荐指数:
树链剖分入门讲解 问题导入 当我们做题目的时候,往往会有一些题目是给定一颗树,并对这颗树做一堆蛇皮怪物般的操作的。 那么,我们要怎么做呢? 这里提供一种思想,就是把树拆掉: 以轻重边为基础的拆边,把一颗树拆成大大小小的几条链放到类似于常用的线段树里面加以操作。 轻重 ...
首先我们有一颗树每个点(或者边)有权值,我们要做的就是询问两个点之间路径上各点(边)权值的最大、最小,权值和(就是线段树能干的),然后我们还要支持在线更改任意节点(边)的权值。 我们要做的是轻重链剖分,首先我们看几个定义 size:和SBT里的一样,size[i]为以该点为根节点 ...
树链剖分是解决树上问题的一种常见数据结构,对于树上路径修改及路径信息查询等问题有着较优的复杂度。树链剖分分为两种:重链剖分和长链剖分,因为长链剖分不常见,应用也不广泛,所以通常说的树链剖分指的是重链剖分。在这里讲解并总结一下树链剖分的实现、优秀性质及应用。 重链剖分 先来介绍几个重链剖分 ...
“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。 树链剖分是把一棵树分割成若干条链,以便于维护信息的一种方法,其中最常用的是重链剖分(Heavy Path ...
树链剖分 1. 相关概念 重儿子:父亲节点的所有儿子中子树结点数目最多(size最大)的结点; 轻儿子:父亲节点中除了重儿子以外的儿子; 重边:父亲结点和重儿子连成的边; 轻边:父亲节点和轻儿子连成的边; 重链:由多条重边连接而成的路径; 轻链 ...
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入格式 第一 ...
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中。这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧。 大多数算法都要用kruskal把最小生成树弄出来,因为要求次小生成树。至于为什么次小一定只在最小的基础上改变了一条边,我也不会严谨 ...
今天说是要练习LCA结果找了道题看着题解打完了,如此惭愧,Lca还得好好理解啊,感觉在最大生成树上做有点异样,可能还是不是很理解吧,在noip前一定要再把这道题再a一遍,好题啊。 这是2013noipt3的题,难度适中,比以往的简单没让人想不出来思路虽然我第一遍看也没想起来但是题解易懂 ...