[csharp] //九度OJ 教程82 拓撲排序之《產生冠軍》 //http://ac.jobdu.com/problem.php?cid=1040&pid=81 #include<stdio.h> #include<string.h> #define MAXS 1002 char name[MAXS][40]; int count; int findnum(char *h) { int i,j,k,flag=1; for(i=1;i<count&&flag;i++) { if(strcmp(name[i],h)==0)flag=0; } if(flag==0)return (i-1); else { strcpy(name[count++],h); return (count-1); } } int main() { char h1[40],h2[40]; int a,b,i,j,n,mark[MAXS][MAXS],sum; while(~scanf("%d",&n)&&n) { count=1; memset(mark,0,MAXS*MAXS*sizeof(int)); while(n--) { scanf("%s %s",h1,h2); a=findnum(h1); b=findnum(h2); mark[a][b]=1; mark[0][b]++;//mark[0][k]表示第k位選手被擊敗的次數。 }//while for(i=1,sum=0;i<count;i++)if(mark[0][i]==0)sum++; if(sum==1)printf("Yes\n"); else printf("No\n"); } return 0; }