树链剖分小结及题目
我们经常会遇到这样一类题目:给出一棵树,询问树上u,v两点路径间的最值,合值,更新u,v路径上的点权或边权,或者区间更新etc,此时如果单纯的用线段树或者树状数组去搞,很明显问题不能够得到完美解决,此时就需要更高级的数据结构去对树进行重新构造,也就是通常说的树链剖分。
一.树链剖分
树链剖分,顾名思义,也就是对树的每一条链进行剖分,将一棵树拆分成若干条链,对其进行重新编号,在进行了重新编号之后就可以用其他数据结构(线段树,树状数组,etc)去对数据进行有序化处理,这也就是说,大部分情况下,树链剖分是在为其他数据结构“打辅助”,和其他数据结构搭配起来使用才能更充分发挥它的作用。
剖树:
首先我们引入一些新的符号标记和一些概念
siz[i]:以i为结点的子树结点个数
son[i]:以i为结点的所有子结点中,siz最大的那个结点
D