#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=1e8;
const int num=1e4+10;
struct node
{
int v,next;
}e[2*num];
int head[2*num],cnt;
int dp[num];
int n,ans=inf,id[num];
void addedge(int u,int v)
{
e[++cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt;
return ;
}
void dfs(int u,int f)
{
dp[u]=1;
int m1=0,m2=0;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].v;
if(v==f) continue;
dfs(v,u);
dp[u]+=dp[v];
m1=max(m1,dp[v]);
}
m2=max(m1,n-dp[u]);
if(ans>=m2)
{
ans=m2;
id[u]=m2;
}
return ;
}
int main()
{
int u,v;
for(int i=1;i<=n;i++)
id[i]=inf;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
dfs(1,-1);
for(int i=1;i<=n;i++)
{
if(id[i]==ans)
{
printf("%d\n",i);
}
}
return 0;
}
Tree Cutting POJ - 2378+Poj3107+求樹的重心
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.