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 |
ft~~~好低级的错误,大家当我没问。In Reply To:谁能帮我看一下吗,WA好几天了(内附代码)。 Posted by:madongtest at 2006-09-10 01:35:59 > #include<stdio.h> > #include<stdlib.h> > #include<memory.h> > #define GSIZE 10010 > #define ESIZE 50010 > > int order[GSIZE],e,visit[GSIZE],flag[GSIZE],out[ESIZE],in[ESIZE],degree[GSIZE]; > struct Point > { > int id; > struct Point *next; > }mapa[GSIZE],mapt[GSIZE]; > void insert(int a, int b) > { > Point *p = &mapa[a]; > while(p->next ) > p = p->next; > p->next = (struct Point *)malloc(sizeof(struct Point)); > p = p->next; > p->id = b; > p->next = NULL; > p = &mapt[b]; > while(p->next ) > p = p->next; > p->next = (struct Point *)malloc(sizeof(struct Point)); > p = p->next; > p->id = a; > p->next = NULL; > } > void dfsa(Point *k) > { > visit[k->id] = true; > Point *p = k->next; > while(p){ > if(!visit[p->id]){ > p = &mapa[p->id]; > dfsa(p); > } > p = p->next; > } > order[e++] = k->id; > } > void dfst(Point *k) > { > visit[k->id] = true; > Point *p = k->next; > flag[k->id] = e; > while(p != NULL){ > if(!visit[p->id]){ > p = &mapt[p->id]; > dfst(p); > } > p = p->next; > } > } > int main() > { > int n,m,i,x,y; > scanf("%d%d",&n,&m); > for(i = 1; i <= n; i++){ > mapa[i].next = NULL; > mapa[i].id = i; > mapt[i].next = NULL; > mapt[i].id = i; > } > for(i = 0; i < m; i++){ > scanf("%d %d",&x,&y); > insert(x,y); > out[i] = x; > in[i] = y; > } > Point *temp; > memset(visit,0,sizeof(visit)); > e = 0; > for(i = 1; i <= n; i++){ > if(!visit[i]){ > temp = &mapa[i]; > dfsa(temp); > } > } > e = 0; > memset(flag,0,sizeof(flag)); > memset(visit,0,sizeof(visit)); > for(i = n-1; i >= 0; i--){ > if(!visit[order[i]]){ > temp = &mapt[order[i]]; > dfst(temp); > e++; > } > } > memset(degree,0,sizeof(degree)); > for(i = 0; i < m; i++){ > int eee = flag[out[i]]; > int sss = flag[in[i]]; > if(eee != sss) > degree[eee]++; > } > int pos,tflag = 0; > for(i = 0; i < e; i++){ > if(degree[i] == 0){ > pos = i; > tflag++; > } > } > if(tflag != 1) > printf("0\n"); > else{ > int out = 0; > for(i = 1; i <= n; i++) > if(flag[i] == pos) > out++; > printf("%d\n",out); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator