1 条题解
-
0
C++ :
#include<cstdio> #include<algorithm> #include<vector> int n,nn; int u,v,shu,first[1000010]; struct bian { int v,next; }o[3000010]; inline void add(int u,int v) { o[++shu].v=v; o[shu].next=first[u]; first[u]=shu; } bool flag[1000010]; int sum[1000010],max[1000010],ans[1000010]; inline void build(int x) { flag[x]=1; for(int i=first[x];i;i=o[i].next) if(!flag[o[i].v]) { build(o[i].v); sum[x]+=sum[o[i].v]; if(max[x]<sum[o[i].v]) max[x]=sum[o[i].v]; } ++sum[x]; if(max[x]<=nn&&n-sum[x]<=nn) ans[++ans[0]]=x; } int main() { //freopen("tree.in","r",stdin); //freopen("tree.out","w",stdout); scanf("%d",&n); for(int i=1;i<n;++i) { scanf("%d%d",&u,&v); add(u,v); add(v,u); } nn=n>>1; build(1); if(ans[0]) { std::sort(ans+1,ans+ans[0]+1); for(int i=1;i<=ans[0];++i) printf("%d\n",ans[i]); } else puts("NONE"); // getchar(); // getchar(); // getchar(); // getchar(); }
- 1
信息
- ID
- 516
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者