树上差分

点差分
将两点\(u,v\)之间路径上的所有点权增加\(x,o=LCA(u,v),o\)的父亲节点为\(p\),则操作如下:
a[u]+=x,a[v]+=x,a[o]-=x,a[p]-=x;

边差分
将两点\(u,v\)之间路径上的所有边权增加\(x,o=LCA(u,v)\),以每条边两端深度较大的节点当作该边的差分数组,则操作如下:
a[u]+=x,a[v]+=x,a[o]-=2*x;
统计以\(u\)为根的子树点权和,即为\(u\)\((u\)点对应的边\()\)的权值

posted @ 2020-03-14 17:38  Zeronera  阅读(121)  评论(0)    收藏  举报