123

发布时间 2023-11-22 20:41:06作者: Kinglangsijun
#include <bits/stdc++.h>
using namespace std;
int n;
vector <int> v[50005];
bool vis[50005],vis2[50005];
int a[50005],ans=INT_MAX,fa[50005],s[50005];
int dfs(int x)
{
    int ss=0;
    if(vis[x])
        return 0;
    if(v[x].size()==1 && x!=1)
    {
        a[x]=1;
        return 1;
    }
    vis[x]=1;
    for(int i=0;i<v[x].size();i++)
        a[x]+=dfs(v[x][i]);
    vis[x]=0;
    a[x]++;
    return a[x];
     
}
void sbdfs(int x,int la)
{
    if(vis2[x])
        return;
    vis2[x]=1;
    fa[x]=la;
    for(int i=0;i<v[x].size();i++)
        sbdfs(v[x][i],x);
}
int main()
{
    cin>>n;
    for(int i=1;i<n;i++)
    {
        int x,y;
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    sbdfs(1,1);
    a[1]=dfs(1);
    for(int i=1;i<=n;i++)
    {
        s[i]=n-a[i];
        for(int j=0;j<v[i].size();j++)
            if(v[i][j]!=fa[i])
              s[i]=max(s[i],a[v[i][j]]);
        ans=min(ans,s[i]);
    }
    for(int i=1;i<=n;i++)
        if(s[i]==ans)
             cout<<i<<' ';
    return 0;
}