http://poj.org/problem?id=2378
他人具体代码:
View Code
#include<cstdio> #include<vector> #include<cstring> using namespace std; const int maxn = 10010; vector<int> edge[maxn]; int sum[maxn],ans[maxn],n; void dfs(int u,int fa){ sum[u]=1; int i,j; bool flag=true; for(i=0;i<edge[u].size();i++){ int to=edge[u][i]; if(to==fa) continue ; dfs(to,u); if(sum[to]>n/2) flag=false; sum[u]+=sum[to]; } if(flag&&n-sum[u]<=n/2) ans[u]=true; } int main(){ int i,a,b; while(scanf("%d",&n)!=EOF){ memset(ans,0,sizeof(ans)); for(i=0;i<=n;i++) edge[i].clear(); for(i=0;i<n-1;i++){ scanf("%d%d",&a,&b); edge[a].push_back(b); edge[b].push_back(a); } dfs(1,0); for(i=1;i<=n;i++){ if(ans[i]) printf("%d\n",i); } puts(""); } return 0; }
