main
黄海 2 years ago
parent 5685e014e2
commit b377d89240

@ -33,9 +33,9 @@ void dfs2(int u, int fa) {
for (int i = h[u]; ~i; i = ne[i]) {
int v = e[i];
if (v == fa) continue;
//如果 st[v]=1,说明v的贡献包含在f1[u]里面
// 如果 st[v]=1,说明v的贡献包含在f1[u]里面
int val = f2[u] - (st[v] ? f1[v] : 0);
f2[v] = f1[v] + (val > 0 ? val : 0);
f2[v] = f1[v] + max(val, 0);
dfs2(v, u);
}
}
@ -57,10 +57,13 @@ int main() {
add(a, b), add(b, a);
}
// 第一次dfs
dfs1(1, 0);
// 它们两个是一个意思
f2[1] = f1[1];
// 换根dp
dfs2(1, 0);
// 输出答案
for (int i = 1; i <= n; i++) printf("%d ", f2[i]);
return 0;
}
Loading…
Cancel
Save