树链剖分

       这其实是一个很神奇的东西,分为三种,其中比较常见的是:重链剖分,长链剖分;

       那么·这个用来解决什么问题呢? 这个数据结构支持对于树上的·两个节点x,y,将其两点间的路径上的所有数加上一个值看,并且可以查询 x到y的最短路上边的权值和。

3.相关概念 树链剖分:一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、BST、SPLAY、线段树等)来维护每一条链。 重儿子:一个结点的所有子树中,树的大小(即包括根结点的结点的个数)最大的子树之一的根结点(也就是当前结点的一个子节点),称为该节点的重儿子,注意,重儿子只能有1个,当出现

多个子树大小相同且都为最大时,我们随机选取其中一个作为重儿子,其他的则看做轻儿子。

轻儿子:一个结点的所有子结点中不是重儿子的结点 重链:一个结点与他的重儿子之间连的边

*注意,由于重儿子的定义,一棵树的重链剖分方式可能不唯一

3.树链剖分细节

为了对一棵树进行重链剖分,我们维护以下几个数组:

fa[x]:结点x的父亲

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfyj.html