树上差分:边差分与点差分

1.边差分:

一棵树,让x->y路径上的边权都加上w: d[x]+=w,d[y]+=w,d[lca(x,y)]-=2*w;

最后求出F[i]:以i为子树,d的权值和。即i -> fa[i] 的边权。

如下图:

让6 -> 5 路径上的边权全部加1.

d[2]=-2,d[6]=d[5]=1.其余为0

然后F的值为:F[6]=F[3]=F[5]=1. 表示

6 -> fa[6] 的边权为1,3 -> fa[3] 的边权为1,5 -> fa[5] 的边权为1,

树上差分:边差分与点差分

点差分:

一棵树,让x->y路径上的点权都加上w: d[x]+=w,d[y]+=w,d[lca(x,y)]-=w,d[fa[lca(x,y)]];

最后求出F[i]:以i为子树,d的权值和。即i -> fa[i] 的边权。

看图说话:

让6 -> 5 路径上的边权全部加1.

d[2]==d[1]=-1,d[6]=d[5]=1.其余为0

然后F的值为:F[6]=F[3]=F[2]=F[5]=1.其余为0.

因为点2也算6 -> 5 路径上的点,5,6的贡献上移到lca(5,6)时,变成了2,需要在2点-1,且点2的父亲点权应该不变,所以也减一。

树上差分:边差分与点差分