题目:http://acm.hdu.edu.cn/showproblem.php?pid=2094
//声明:该题不是我写的。
1 #include<stdio.h> 2 #include<string.h> 3 int nu,m,sum; 4 int map[1001][1001]; 5 int degree[1001]; 6 char s[1001][51]; 7 int a[1001]; 8 9 int find(char *ss) 10 { 11 int i; 12 for(i=0;i<nu;i++) 13 { 14 if(strcmp(ss,s[i])==0) 15 return i; 16 } 17 strcpy(s[i],ss); 18 return nu++; 19 } 20 21 int topo() 22 { 23 int i,l=0; 24 for(i=0;i<nu;i++) 25 if(!degree[i]) 26 l++; 27 return l; 28 } 29 30 int main() 31 { 32 char s1[101],s2[101]; 33 int i,x,y; 34 while(~scanf("%d",&m)) 35 { 36 if(m==0) 37 break; 38 nu=0; 39 memset(map,0,sizeof(map)); 40 memset(degree,0,sizeof(degree)); 41 memset(a,0,sizeof(a)); 42 for(i=0;i<m;i++) 43 { 44 scanf("%s %s",s1,s2); 45 x=find(s1); 46 y=find(s2); 47 if(map[x][y]==0) 48 { 49 map[x][y]=1; 50 degree[y]++; 51 } 52 } 53 if(topo()==1) 54 puts("Yes"); 55 else 56 puts("No"); 57 } 58 return 0; 59 }