#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 50010;
int tot[MAXN],f[MAXN], minx,size, head[MAXN],n;
struct Node{
int v, next;
}E[MAXN<<1];
void init()
{
size = 0;
memset(head, -1, sizeof(head));
memset(E,0,sizeof(E));
memset(f,0,sizeof(f));
memset(tot,0,sizeof(tot));
}
void addEdge(int u, int v) {
E[size].v = v;
E[size].next = head[u];
head[u] = size++;
}
int dfs(int node ,int father)
{
tot[node]=1;
for(int e=head[node];e!=-1;e=E[e].next)
if(E[e].v!=father)
tot[node]+=dfs(E[e].v,node);
f[node]=n-tot[node];
for(int e=head[node];e!=-1;e=E[e].next)
if(E[e].v!=father)
f[node]=max(f[node],tot[E[e].v]);
minx=min(minx,f[node]);
return tot[node] ;
}
int main(){
while (~scanf("%d", &n))
{
init();
int key=1;
for (int i=0;i<n-1;i++)
{
int u, v;
scanf("%d%d", &u,&v);
addEdge(u,v);
addEdge(v,u);
}
minx = INF;
dfs(1, -1);
for (int i = 1; i <= n; ++i)
if (f[i] == minx)
{
if (key)
{
key=0;
printf("%d",i);
}
else
printf(" %d",i);
}
printf("\n");
}
return 0;
}
Godfather POJ - 3107
最新推荐文章于 2020-09-13 17:16:45 发布