首先,树上差分是从子节点推到根节点,定义 d 差分数组
若修改 (x,y) 路径上的点权,则 dx,dy+=k,dlca,dfalca−=k
1 2 3 4 5 6
| void dfs(int u){ val[u] = d[u]; for (auto v : g[u]){ dfs(v), val[u] += val[v]; } }
|
若修改 (x,y) 路径上的边权,则 dx,dy+=k,dlca−=2k
1 2 3 4 5 6 7 8
| int dfs(int u){ int ret = d[u]; for (auto i : g[u]){ i.w = dfs(i.v); ret += i.w; } return ret; }
|
P3128 最大流