

1 //Accepted 3342 31MS 260K 1002 B G++ 2 #include <stdio.h> 3 #include <string.h> 4 #define M 110 5 int g[M][M]; 6 int q[M]; 7 bool useif[M]; 8 int n,m; 9 int topo() 10 { 11 int i,j,k,t; 12 memset(useif,0,sizeof(useif)); 13 t = 0; 14 for(i=1;i<=n;i++) 15 { 16 bool flag = true; 17 for(j=1;j<=n;j++) 18 { 19 if(q[j] == 0 && useif[j] == 0 ) 20 { 21 useif[j] = 1; 22 t ++; 23 for(k = 1; k <= n; ++k) 24 if(g[j][k] == 1) 25 q[k] --; 26 flag = false; 27 break; 28 } 29 } 30 if(flag) break; 31 } 32 if(t == n) 33 return 1; 34 else 35 return 0; 36 } 37 int main() 38 { 39 int a,b,i; 40 while(scanf("%d%d",&n,&m)!=EOF && n + m ) 41 { 42 memset(g,0,sizeof(g)); 43 memset(q,0,sizeof(q)); 44 for(i=1;i<=m;i++) 45 { 46 scanf("%d%d",&a,&b); 47 a++; 48 b++; 49 if(g[a][b]==0) q[b]++; 50 g[a][b] = 1; 51 } 52 if (topo()) 53 printf("YES\n"); 54 else 55 printf("NO\n"); 56 } 57 return 0; 58 }