树上差分#
描述#
把差分数组(不是前缀和)放到一个树上,使某个节点的权值等于其本身加上所有子节点的差分的那个值的和。(语无伦次)
差分数组的作用是使区间修改的时间复杂度更低,对应到树上,就可以应用到类似于这样的情况:
点的差分#
给 A—B 的简单路径上所有的节点的权值增加 1。
可以把这条路径拆成两条链,分别为 A 到 L(A 和 B 的 LCA)和 B 到 L。
把 A 与 B 的标记增加 1,那么 A 到 L 和 B 到 L 对应的值在统计时都会增加 1,而 L 的值总共增加了 2,所以再把 L 的标记减 1。L 的父亲节点,类似修改差分数组的区间时区间之后的那个点,将其标记减 1。
边的差分#
把边权转化到下边的点上。
所以这次 L 点的标记不能动,那么,区间每增加 1,L 点的标记要减去 2.