Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
请大神给我看看,为什么过不了#include<iostream> #include<cstdio> #include<vector> #include<iostream> #include <stdio.h> #include <stdlib.h> #include <cstdio> #include <cstring> #include<algorithm> using namespace std; vector<int>ans; int n,minlen,minx,k; const int maxlen=100005; struct Node{ int to,next; }; Node edge[maxlen]; int box[maxlen]; int ecnt; int sum[maxlen]; int num[maxlen]; bool vis[maxlen]; void _make_map(int from,int to){ edge[ecnt].to=to; edge[ecnt].next=box[from]; box[from]=ecnt++; } void make_map(int from,int to){ _make_map(from,to); _make_map(to,from); } void dfs(int u){ num[u]=1; vis[u]=1; minx=-1; for(int i=box[u];i;i=edge[i].next){ int v=edge[i].to; if(vis[v]) continue; dfs(v); num[u]+=num[v]; minx=max(minx,num[v]); } sum[u]=max(minx,n-num[u]); } int main(){ int i, a, b; scanf("%d", &n); memset(box,0,sizeof(box)); memset(num,0,sizeof(num)); memset(sum,0,sizeof(sum)); memset(vis,0,sizeof(vis)); for(ecnt= i = 1; i < n; i ++){ scanf("%d%d", &a, &b); make_map(a,b); } minlen=1000000000; dfs(1); for(int i=1;i<=n;i++){ if(sum[i]<minlen){ ans.clear(); minlen=sum[i]; ans.push_back(i); } else if(sum[i]==minlen){ ans.push_back(i); } } sort(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++) { printf("%d",ans[i]); printf(" "); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator