被大神说成水题的这道居然写了好久,果然是菜的不行不行了
#include <stdio.h>
#include <string.h>
int to[20111],head[10111],next[20111],cnt=0,n,ok[10111],flag[10111];
void add(int i,int j){to[cnt]=j;next[cnt]=head[i];head[i]=cnt++;}
void dfs(int i,int pre)
{
if(flag[i]!=-1)return;
int v=0;flag[i]=1;
for(int k=head[i]; k!=-1;k=next[k])
{
int j=to[k];
if(j!=pre)
{
dfs(j,i);
flag[i]+=flag[j];
if(flag[j]>n/2)
{v=1;}}}
if(n-flag[i]>n/2)
v=1;
if(v)
ok[i]=0;
else
ok[i]=1;}
int main ()
{
scanf ("%d",&n);
for(int i=0; i<=n; i++)
{
to[i]=0;
head[i]=-1;
ok[i]=-1;
flag[i]=-1;
}
memset(next,-1,sizeof(next));
for(int i=1; i<n; i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs(1,1);
for(int i=1;i<=n;i++)
if(ok[i]==1)
printf("%d\n",i);
}