P1395 会议(洛谷\树的重心性质)

P1395 会议

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;

int n, m;
int h[N], e[N*2], ne[N*2], idx;
int Index, res = INT_MAX, dis[N];
bool st[N];
void add(int a, int b){
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

int dfs(int u){
    st[u] = true;
    int sum = 1, ans = 0;
    for(int i = h[u]; i != -1; i = ne[i]){
        int j = e[i];
        if(!st[j]){
            int t = dfs(j);
            sum += t;
            ans = max(ans, t);
        }
    }
    ans = max(ans, n - sum);
    if(res > ans){
        res = ans; Index = u;
    }else if(res == ans && u < Index){
        Index = u;
    }
    return sum;
}
signed main(){
    memset(h, -1, sizeof h);
    cin >> n;
    for(int i = 1; i <= n - 1; ++i){
        int a, b; cin >> a >> b; add(a, b); add(b, a);
    }
    
    dfs(1);
    // cout << res << endl;
    int sum = 0;
    queue<int> q; q.push(Index);
    memset(st, 0, sizeof st);
    st[Index] = 1;
    while(q.size()){
        auto t = q.front(); q.pop();
        for(int i = h[t]; i != -1; i = ne[i]){
            int j = e[i];
            if(!st[j]){
                st[j] = true;
                dis[j] = dis[t] + 1;
                sum += dis[j];
                q.push(j);
            }
        }
    }
    cout << Index << " " << sum << endl;
    
    
    return 0;
}
posted @ 2025-03-21 22:08  awei040519  阅读(15)  评论(0)    收藏  举报