#include<stdio.h>
#include<vector>
#include<string.h>
#include<set>
using namespace std;
int n, father[10010]={0}, isfather[10010]={0};
vector<int> G[10010];
int findfa(int x){
int temp, xx=x;
while(father[x]!=x){
x=father[x];
}
while(father[xx]!=xx){
temp=father[xx];
father[xx]=x;
xx=temp;
}
return x;
}
void uunion(int a, int b){
int faa=findfa(a), fab=findfa(b);
if(faa!=fab)father[faa]=fab;
}
void init(){
for(int i=1;i<=n;i++)father[i]=i;
}
int block(){
int i, num=0;
for(i=1;i<=n;i++){
isfather[findfa(i)]=1;
}
for(i=1;i<=n;i++){
if(isfather[i]>0)num++;
}
return num;
}
set<int> temp, ans;
int maxx=0;
void DFS(int now, int level, int pre){
if(level>maxx){
temp.clear();
temp.insert(now);
maxx=level;
}
else if(level==maxx){
temp.insert(now);
}
for(int i=0;i<G[now].size();i++){
if(G[now][i]!=pre)DFS(G[now][i],level+1,now);
}
}
int main(){
int i, id1, id2, blo;
scanf("%d",&n);
init();
for(i=0;i<n-1;i++){
scanf("%d%d",&id1,&id2);
G[id1].push_back(id2);
G[id2].push_back(id1);
uunion(id1,id2);
}
blo=block();
if(blo>1){
printf("Error: %d components\n",blo);
}
else{
DFS(1,1,-1);
ans=temp;
set<int>::iterator it=ans.begin();
DFS(*it,1,-1);
for(it=temp.begin();it!=temp.end();it++){
ans.insert(*it);
}
for(it=ans.begin();it!=ans.end();it++){
printf("%d\n",*it);
}
}
return 0;
}
PAT-A1021
最新推荐文章于 2020-08-18 23:57:55 发布