#include<iostream>#include<cstring>#include<vector>#include<stdio.h>#include<queue>#include<math.h>#include<stack>#include<algorithm>#include<map>#include<set>#define MAX 99999999usingnamespace std;int n;//int road[10001][10001];
vector<int> road[10001];int visi[10001];int c_m;int m =-1;
set<int>v;voidju(int root){
visi[root]=1;if(road[root].size()==0)return;for(int i =0;i<road[root].size();i++)if(visi[road[root][i]]==0)ju(road[root][i]);}voiddfs(int root){
visi[root]=1;if(m < c_m)
m = c_m;for(int i =0;i<road[root].size();i++){
if(visi[road[root][i]]==0){
c_m++;dfs(road[root][i]);
c_m--;}}
visi[root]=0;}voidget_node(int root,int k){
visi[root]=1;if(c_m == m){
v.insert(k);
visi[root]=0;return;}for(int i =0;i<road[root].size();i++){
if(visi[road[root][i]]==0){
c_m++;get_node(road[root][i],k);
c_m--;}}
visi[root]=0;}intmain(){
//ios_base::sync_with_stdio(false);//cin.tie(0);scanf("%d",&n);for(int i =0;i<n-1;i++){
int a,b;//cin>>a>>b;scanf("%d%d",&a,&b);
road[a].push_back(b);
road[b].push_back(a);}int flag =0;for(int i =1;i<=n;i++){
if(visi[i]==0){
flag ++;ju(i);}}if(flag !=1){
cout<<"Error: "<<flag<<" components";return0;}memset(visi,0,sizeof(visi));for(int i =1;i<=n;i++){
c_m =0;dfs(i);if(c_m > m)
m = c_m;}for(int i =1;i<=n;i++){
c_m =0;get_node(i,i);}for(auto i = v.begin();i!=v.end();i++)printf("%d\n",*i);return0;}
代码二 :AC
#include<iostream>#include<cstring>#include<vector>#include<stdio.h>#include<queue>#include<math.h>#include<stack>#include<algorithm>#include<map>#include<set>#define MAX 99999999typedeflonglong ll;usingnamespace std;int n,m;
vector<int> edge[10001];int max_h =-1;
vector<int>ans;int visi[10001];voiddfs(int root,int depth){
visi[root]=1;if(depth>max_h)
max_h = depth;if(edge[root].size()==0)return;for(int i =0;i<edge[root].size();i++){
if(!visi[edge[root][i]])dfs(edge[root][i],depth+1);}
visi[root]=0;}int no;voiddd(int root,int depth){
visi[root]=1;if(depth==max_h)
no =1;if(edge[root].size()==0)return;for(int i =0;i<edge[root].size();i++){
if(!visi[edge[root][i]])dd(edge[root][i],depth+1);}
visi[root]=0;}voidche(int root){
visi[root]=1;if(edge[root].size()==0)return;for(int i =0;i<edge[root].size();i++){
if(!visi[edge[root][i]])che(edge[root][i]);}}intmain(){
scanf("%d",&n);for(int i =0;i<n-1;i++){
int a,b;scanf("%d%d",&a,&b);
edge[a].push_back(b);
edge[b].push_back(a);}int t =0;for(int i =1;i<=n;i++){
if(visi[i]==0)
t++;che(i);}if(t!=1){
cout<<"Error: "<<t<<" components";return0;}memset(visi,0,sizeof(visi));for(int i =1;i<=n;i++){
dfs(i,0);}for(int i =1;i<=n;i++){
no =0;dd(i,0);if(no)
ans.push_back(i);}for(int i =0;i<ans.size();i++)
cout<<ans[i]<<endl;return0;}