社区讨论

求助,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 条回复,欢迎继续交流。

正在加载回复...