1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #define MAXN 50010 7 using namespace std; 8 typedef struct PP{ 9 int id,par; 10 bool operator < (const PP & a) const{ 11 if(par == a.par) return id < a.id; 12 return par < a.par; 13 } 14 }Partition; 15 typedef struct{ 16 int to,next; 17 }Node; 18 Node edge[2*MAXN]; 19 Partition P[MAXN]; 20 int head[MAXN],vis[MAXN],cnt[MAXN],N; 21 void addedge(int u,int v,int k){ 22 edge[k].to = v; 23 edge[k].next = head[u]; 24 head[u] = k; 25 } 26 int dfs_child(int s){ 27 vis[s] = cnt[s] = 1; 28 for(int i = head[s];~i;i = edge[i].next){ 29 int u = edge[i].to; 30 if(!vis[u]) cnt[s] += dfs_child(u); 31 } 32 return cnt[s]--; 33 } 34 void dfs_partition(int s){ 35 P[s].id = s; 36 P[s].par = N-cnt[s]-1; 37 vis[s] = 1; 38 for(int i = head[s];~i;i = edge[i].next){ 39 int u = edge[i].to; 40 if(!vis[u]){ 41 P[s].par = max(P[s].par,cnt[u]+1); 42 dfs_partition(u); 43 } 44 } 45 } 46 int main(){ 47 int u,v; 48 while(~scanf("%d",&N)){ 49 int k = 1; 50 memset(head,-1,sizeof(head)); 51 for(int i = 1;i <= N-1;i ++){ 52 scanf("%d%d",&u,&v); 53 addedge(u,v,k++); 54 addedge(v,u,k++); 55 } 56 memset(vis,0,sizeof(vis)); 57 dfs_child(1); 58 memset(vis,0,sizeof(vis)); 59 dfs_partition(1); 60 sort(P+1,P+N+1); 61 k = 1; 62 while(P[k].par == P[1].par){ 63 printf("%d ",P[k].id); 64 k++; 65 } 66 printf("\n"); 67 } 68 return 0; 69 }