树的中心
有兴趣的可以练练
代码献上:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int a,b,maxd;
vector<int> v[1008611];
void dfs(int x,int fa,int dep){
maxd=max(maxd,dep);
for(int i:v[x]){
if(i==fa) continue;
dfs(i,x,dep+1);
}
}
int main(){
int cnt,n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int cnt;
cin>>cnt;
for(int j=1;j<=cnt;j++){
int x;
cin>>x;
v[i].push_back(x);
v[x].push_back(i);
}
}
int ans=1e9;
vector<int> ansp;
for(int p=1;p<=n;p++){
maxd=0;
dfs(p,0,1);
if(maxd<ans){
ans=maxd;
ansp.clear();
ansp.push_back(p);
}else if(maxd==ans){
ansp.push_back(p);
}
}
sort(ansp.begin(),ansp.end());
for(int i:ansp) cout<<i<<" ";
return 0;
}