20231113

发布时间 2023-11-15 21:30:59作者: 臧清宇
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> t[50005];
int m[50005];bool vis[50005];
int minn=INT_MAX,ans[50005],cnt;
void dfs(int x)
{
    vis[x]=true; 
    int k=0;
    for(int i=0;i<t[x].size();i++){
        if(vis[t[x][i]]==false){
            dfs(t[x][i]);
            m[x]+=m[t[x][i]];
            k=max(k,m[t[x][i]]);
        }
    }
    k=max(k,n-m[x]);
    if(k<minn){
        cnt=1;
        ans[cnt]=x;
    }
    if(k==minn){
        ans[++cnt]=x;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)m[i]=1;
    for(int i=1;i<=n-1;i++){
        int u,v;
        cin>>u>>v;
        t[u].push_back(v);
        t[v].push_back(u);
    }
    dfs(1);
    for(int i=1;i<=cnt;i++){
        cout<<ans[i]<<" ";
    }
    return 0;
}