#include<stdio.h> #include<string.h> int indegree[101],map[101][101];//indegree[]記錄各個節點的入度。 int s[101],top;//棧s[]中存放入度爲0的節點。 void tuopu(int n) { int i,j,top=0,t,count=0; memset(s,0,sizeof(s)); for(i=0;i<n;i++) { if(0==indegree[i]) { s[top++]=i; } } while(top>0) { t=s[top-1]; top--; count++; for(j=0;j<n;j++) { if(map[t][j]) { indegree[j]--; if(0==indegree[j]) { s[top++]=j; } } } } if(count<n) printf("NO\n");//count小於n說明存在環 else printf("YES\n"); } int main() { int n,m,i,j,a,b; while(scanf("%d%d",&n,&m)&&n&&m) { memset(map,0,sizeof(map)); memset(indegree,0,sizeof(indegree)); for(i=0;i<m;i++) { scanf("%d%d",&a,&b); if(!map[a][b]) { map[a][b]=1; indegree[b]++; } } tuopu(n); } return 0; }