AC代码
#include<bits/stdc++.h>
using namespace std;
int n,cn=0,Max;
vector<int> v[10001],temp[10001];
bool vis[10001]={false};
void DFS(int i,int cn)
{
vis[i]=true;
temp[cn].push_back(i);
for(int j=0;j<v[i].size();j++)
{
int u=v[i][j];
if(vis[u]==false)
{
DFS(u,cn);
}
}
}
void Deepest(int i,int d)
{
vis[i]=true;
d+=1;
Max=max(d,Max);
for(int j=0;j<v[i].size();j++)
{
if(vis[v[i][j]]==false)
Deepest(v[i][j],d);
}
}
int main()
{
int a,b;
scanf("%d",&n);
for(int i=0;i<n-1;i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
for(int i=1;i<=n;i++)
{
if(vis[i]==false)
{
DFS(i,cn);
cn++;
}
}
if(cn>1)
{
printf("Error: %d components",cn);
}
else{
int d=0;
vector<int> D;
for(int i=1;i<=n;i++)
{
fill(vis,vis+n+1,false);
Max=1;
Deepest(i,0);
if(Max>d)
{
d=Max;
D.clear();
D.push_back(i);
}
else if(Max==d){
D.push_back(i);
}
}
for(int i=0;i<D.size();i++)
{
printf("%d\n",D[i]);
}
}
return 0;
}