|
|
|
@ -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];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|