Luogu P4719 【模板】“动态 DP”&动态树分治

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Mat g[MAXn + 10];
void Update(int x, int v) {
g[x].a[1][0] -= val[x];
g[x].a[1][0] += v;
while (fa[top[x]]) {
Mat last = query(1, nddfs[top[x]], ed[x]);
modifyRepPoint(1, nddfs[x], g[x]);
Mat now = query(1, nddfs[top[x]], ed[x]);
x = fa[top[x]];
g[x].a[0][0] -= max(last.a[0][0], last.a[1][0]);
g[x].a[0][0] += max(now.a[0][0], now.a[1][0]);
g[x].a[0][1] = g[x].a[0][0];
g[x].a[1][0] -= last.a[0][0];
g[x].a[1][0] += now.a[0][0];
}
modifyRepPoint(1, nddfs[x], g[x]);
}