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)]--;