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 |
用vector出错这是我的错误代码,如果把用vector的两处改为数组,就能AC。求解,为什么? #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; #define maxn 1000 int cnt,head[maxn],n,iner[maxn]; int set[maxn],ancestors[maxn]; bool flag[maxn]; vector<int>qes[maxn]; struct node { int y,next; }a[maxn]; void ad(int x,int y) { a[cnt].next=head[x]; a[cnt].y=y; head[x]=cnt++; } void init(int n) { cnt=1; for(int i=0;i<=n;i++) { iner[i]=0;head[i]=0; ancestors[i]=0;set[i]=i; flag[i]=false; qes[i].clear(); } } int find_set(int x) { if(x!=set[x]) set[x]=find_set(set[x]); return set[x]; } void union_set(int x,int y) { x=find_set(x); y=find_set(y); if(x==y)return; set[y]=x; } void LCA(int x) { ancestors[x]=x; for(int i=head[x];i!=0;i=a[i].next) { LCA(a[i].y); union_set(a[i].y,x); ancestors[find_set(x)]=x; } flag[x]=true; int size=qes[x].size(); for(int i=0;i<size;i++) { if(flag[qes[x][i]]) iner[ancestors[find_set(qes[x][i])]]++; } } int main() { int i,j,t,x,y; while(scanf("%d",&n)!=-1) { init(n); for(i=1;i<=n;i++) { scanf("%d:(%d)",&x,&t); for(j=1;j<=t;j++) { scanf("%d",&y); ad(x,y); flag[y]=true; } } scanf("%d",&t); for(i=1;i<=t;i++) { while(getchar()!='('); scanf("%d %d)*%c",&x,&y); qes[x].push_back(y); qes[y].push_back(x); } for(i=1;i<=n;i++) if(!flag[i])break; memset(flag,0,sizeof(bool)*(n+2)); LCA(i); for(i=1;i<=n;i++) if(iner[i]) printf("%d:%d\n",i,iner[i]); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator