http://acm.hdu.edu.cn/showproblem.php?pid=2094
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int n; 5 int map[2001][2001],d[2001],v[2001]; 6 char name[2001][101]; 7 int tt; 8 int findx(char *s) 9 { 10 int i; 11 for(i=0;i<tt;i++) 12 if(strcmp(name[i],s)==0) 13 return i; 14 if(i>=tt) 15 { 16 strcpy(name[tt],s); 17 tt++; 18 } 19 return tt-1; 20 } 21 int main() 22 { 23 char a[100],b[100]; 24 int x,y,j; 25 int flag; 26 while(scanf("%d",&n)!=EOF&&n!=0) 27 { 28 tt=0; 29 memset(v,0,sizeof(v)); 30 memset(d,0,sizeof(d)); 31 memset(map,0,sizeof(map)); 32 for(int i=0;i<n;i++) 33 { 34 scanf("%s%s",a,b); 35 x=findx(a); 36 y=findx(b); 37 38 if(!map[x][y]) 39 { 40 map[x][y]=1; 41 d[y]++; 42 } 43 } 44 flag=0; 45 for(j=0;j<tt;j++) 46 { 47 if(v[j]==0&&d[j]==0) 48 { 49 v[j]=1; 50 flag++; 51 } 52 } 53 if(flag==1) 54 printf("Yes\n"); 55 else 56 printf("No\n"); 57 58 } 59 return 0; 60 }
产生冠军(拓扑排序)
时间: 2024-10-14 17:31:02