社区讨论
求助,90分,WA on #13 #18
P3478[POI 2008] STA-Station参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhju0tyd
- 此快照首次捕获于
- 2025/11/04 08:29 4 个月前
- 此快照最后确认于
- 2025/11/04 08:29 4 个月前
CPP
#include <bits/stdc++.h>
#define int long long
int read() {
int x;
scanf("%lld", &x);
return x;
}
const int N = 1e6 + 5;
int n;
std::vector<int> e[N];
int f[N], g[N], sze[N], ans, res;
void dfs1(int u, int fa) {
sze[u] = 1;
for (int v : e[u]) {
if (v == fa) continue;
dfs1(v, u);
f[n] += sze[v] + f[v];
sze[u] += sze[v];
}
}
void dfs2(int u, int fa) {
g[u] = g[fa] + f[fa] - f[u] + n - sze[u];
for (int v : e[u]) {
if (v == fa) continue;
dfs2(v, u);
}
ans = std::max(ans, g[u] + f[u]);
if (f[u] + g[u] == ans) res = u;
}
int32_t main() {
n = read();
for (int i = 1; i < n; ++i) {
int u = read(), v = read();
e[u].push_back(v);
e[v].push_back(u);
}
dfs1(1, 0);
dfs2(1, 0);
printf("%lld\n", res);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...