(int x, int y, int v)
| 238 | |
| 239 | // 从x到y的路径上,所有节点的值增加v |
| 240 | public static void pathAdd(int x, int y, int v) { |
| 241 | while (top[x] != top[y]) { |
| 242 | if (dep[top[x]] <= dep[top[y]]) { |
| 243 | add(dfn[top[y]], dfn[y], v, 1, n, 1); |
| 244 | y = fa[top[y]]; |
| 245 | } else { |
| 246 | add(dfn[top[x]], dfn[x], v, 1, n, 1); |
| 247 | x = fa[top[x]]; |
| 248 | } |
| 249 | } |
| 250 | add(Math.min(dfn[x], dfn[y]), Math.max(dfn[x], dfn[y]), v, 1, n, 1); |
| 251 | } |
| 252 | |
| 253 | // x的子树上,所有节点的值增加v |
| 254 | public static void subtreeAdd(int x, int v) { |