请求加强数据
查看原帖
请求加强数据
878993
ccisdog楼主2024/12/15 17:40

rt

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long ll;

int n,m;
ll f[N],sz[N];//第i个点是根时的距离和,sz[i]是第i个点的子树节点数量(包括自己)
vector<int>e[N];
void dfs(int x,int p){
    sz[x] = 1;
    for(auto y : e[x]){
        if(y == p){
            continue;
        }
        dfs(y,x);
        sz[x] += sz[y];
        f[x] += sz[y] + f[y];
    }
}
void dfs1(int x,int p){
    if(x != 1)
        f[x] += f[p] - f[x] - sz[x] + n - sz[x];
    for(auto y : e[x]){
        if(y == p){
            continue;
        }
        dfs1(y,x);
    }
}

void solve(){
    cin >> n;
    for(int i = 1; i < n; i++){
        int x,y;
        cin >> x >> y;
        e[x].push_back(y);
        e[y].push_back(x);
    }
    dfs(1,0);
    dfs1(1,0);
    ll ans = 0,sum = 0;
    for(int i = 1; i <= n; i++){
        if(f[i] > sum){
            sum = f[i];
            ans = i;
        }
    }
    //cout << f[654] << "\n";
    cout << ans << "\n";
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    while(T--){
        solve();
    }
}

虽然和答案一样都输出654,但是我此时的深度之和为11325。题解里的代码的深度之和有10625和11325还有12025的都可以ac @minstdfx @_bzy @realskc

2024/12/15 17:40
加载中...