#include<bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
#define ull unsigned long long
#define endl '\n'
using namespace std;
const int N=1e5;
int fa[N+50],pre[N+50],si[N+50],r[N+50];
struct node
{
int from,to,next;
}a[N*2+50];
int n,k;
void add(int u,int v)
{
k++;
a[k].to=v;
a[k].next=pre[u];
pre[u]=k;
}
int dfs(int x,int f)
{
si[x]=1;
fa[x]=f;
for(int i=pre[x];i!=0;i=a[i].next)
{
if(a[i].to!=f)
{
si[x]=si[x]+dfs(a[i].to,x);
}
}
return si[x];
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
int x,y;
for(int i=1;i<=n-1;i++)
{
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs(1,0);
int mi=INT_MAX;
for(int i=1;i<=n;i++)
{
r[i]=n-si[i];
for(int j=pre[i];j!=0;j=a[j].next)
{
if(fa[a[j].to]==i)
{
r[i]=max(r[i],si[a[j].to]);
}
}
mi=min(mi,r[i]);
}
for(int i=1;i<=n;i++)
{
if(r[i]==mi)
{
cout<<i<<" ";
}
}
return 0;
}
树的重心模板
最新推荐文章于 2026-06-21 09:59:00 发布

561

被折叠的 条评论
为什么被折叠?



