阅读体验:https://www.zybuluo.com/Junlier/note/1228014
难的是天天爱跑步)
前置知识点
-
首先得知道差分这个东西吧! 简单差分
-
在讲树上差分之前,首先需要知道树的以下两个性质:
- 任意两个节点之间有且只有一条路径。
- 一个节点只有一个父亲节点(即只有一条返祖边)
-
可以发现所有树上两点(p,q)--->q
树上差分
的巨佬们最好学一下
像差分一样,树上差分也有前缀和思想
一个点的真实权值是一个点子树内所有差分后的权值之和(额,有点拗口没关系)
总的来说就是一个点的差分数组最后的值是整个子树内差分数组的和,再加进点的权值里
,问你最后点的权值情况(时间复杂度:请你尽量跑得快)
我们考虑差分,时刻记住上面的那句加粗的话
首先在p上面对差分数组+1,再在q上面对差分数组+1,在Lca(p,q)处对差分数组-1
的那个logn
如果需要代码板子的话可以看下面例题。。。
总结一下:
- 树上差分主要用于求解一些树上的路径问题
- 它通过利用树的一些性质,用一个差分数组来实现对一条路径的操作,这涉及到路径的 起,终点 与lca。
- 一般情况下:一个点的真实权值为其所在子树内所有点的差分数组的值的和
- 树上差分一般不适用于询问和操作嵌套的题目,这时一般用树链剖分解决
几道题:
luoguP3128 [USACO15DEC]最大流Max Flow 题解 板子题
luoguP3258 [JLOI2014]松鼠的新家题解 板子题
luoguP2680 运输计划题解 有难度
可以挑战一下天天爱跑步。。。