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 "stdio.h" #include "string.h" #define M 1000 int map[M][M]; int visit[M],in_du[M]; int num=0; bool topo() { int top=0,cout=0; if(!num) return true; for(int i=1;i<=100;i++) { if(in_du[i]>1) return false; if(!in_du[i] && !visit[i]) cout++; if(cout>1) return false; // 是森林就返回false } cout=0; while(top<num) { int i,j; for(i=1;i<=1000;i++) if(!in_du[i] && !visit[i]) break; if(i<=1000) { visit[i]=1; cout++; for(j=1;j<=1000;j++) if(map[i][j]) in_du[j]--; } top++; } if(cout<num) return false; else return true; } int main() { int x,y; int cout=1; while(1) { bool flag=false; memset(map,0,sizeof(map)); memset(in_du,0,sizeof(in_du)); for(int j=1;j<=1000;j++) visit[j]=1; num=0; while(1) { scanf("%d%d",&x,&y); if(!x && !y) break; if(x==-1 && y==-1) {flag=true;break;} map[x][y]=1; if(in_du[y]==0) {num++;visit[y]=0;visit[x]=0;} in_du[y]++; } if(flag==true) break; if(topo()==true) printf("Case %d is a tree.\n",cout); else printf("Case %d is not a tree.\n",cout); cout++; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator