diff --git a/TangDou/Topic/HuanGenDp/P6419.cpp b/TangDou/Topic/HuanGenDp/P6419.cpp index 0f1a1d2..f358e85 100644 --- a/TangDou/Topic/HuanGenDp/P6419.cpp +++ b/TangDou/Topic/HuanGenDp/P6419.cpp @@ -26,17 +26,15 @@ void dfs1(int u, int fa) { int v = e[i]; if (v == fa) continue; dfs1(v, u); - if (sz[v]) { - g[u] += g[v] + 2 * w[i]; - int now = mx1[v] + w[i]; - if (now >= mx1[u]) { - mx2[u] = mx1[u]; - mx1[u] = now; - id[u] = v; - } else if (now >= mx2[u]) { - mx2[u] = now; - } - } + if (sz[v] == 0) continue; + g[u] += g[v] + 2 * w[i]; + int now = mx1[v] + w[i]; + if (now >= mx1[u]) { + mx2[u] = mx1[u]; + mx1[u] = now; + id[u] = v; + } else if (now >= mx2[u]) + mx2[u] = now; sz[u] += sz[v]; } } @@ -53,9 +51,9 @@ void dfs2(int u, int fa) { up[v] = max(up[u], mx1[u]) + w[i]; } else if (sz[v] && sz[v] != k) { ans[v] = ans[u]; - if (id[u] == v) { + if (id[u] == v) up[v] = max(mx2[u], up[u]) + w[i]; - } else + else up[v] = max(up[u], mx1[u]) + w[i]; }