要给树上一条路径 上的每个点加 。做法是维护差分数组 :d[u]+=w; d[v]+=w; d[lca]-=w; d[fa[lca]]-=w;,最后自底向上把子树和汇总。这个做法每次路径加只改四个位置,却能还原整条路径,原因是( )。
- A. 存的就是点 的最终值,四个位置改完直接读 即可
- B. 因为 LCA 能 求出,所以路径加也是
- C. 因为路径被拆成了 和 两条链,链上差分本来就是一次区间加
- D. 每个点的最终值等于它子树内差分标记之和:、 各 让两条分支各带上一份 , 处 把重复的一份抵消, 处再 截断继续上传,一次汇总就把所有路径加同时还原