2中树上差分:边拆分和点差分
边差分:对于x,y之间所有的路径都加上c,相当于把这条路径拆成2条路径:一条从x到lca,另一条从lca到y,注意因为是边的差分,所以这2条路径是没有重叠的。
即c[x]++,c[y]++,c[lca(x,y)]-=2;
点差分:也是拆分成2条路径,一条是从x到lca,另一条是从y到lca的儿子(同时也是y的祖先),这样就可以保证2条路径没有重叠。
即c[x]++,c[y]++,c[lca(x,y)]--,c[fa(lca)]--;
2中树上差分:边拆分和点差分
边差分:对于x,y之间所有的路径都加上c,相当于把这条路径拆成2条路径:一条从x到lca,另一条从lca到y,注意因为是边的差分,所以这2条路径是没有重叠的。
即c[x]++,c[y]++,c[lca(x,y)]-=2;
点差分:也是拆分成2条路径,一条是从x到lca,另一条是从y到lca的儿子(同时也是y的祖先),这样就可以保证2条路径没有重叠。
即c[x]++,c[y]++,c[lca(x,y)]--,c[fa(lca)]--;