//one#include<bits/stdc++.h>usingnamespace std;int mp[25][25];//建立图int in[25];//记录入度int q[111];//用数组模拟队列来做的intmain(){int n, m;while(cin >> n >> m){memset(mp,0,sizeof(mp));//清空图memset(in,0,sizeof(in));//清空入度int head =0, tail =0;//清空队列while(m--)//建图{int u, v;cin >> u >> v;mp[u][v]=1;in[v]++;//b对应的入度+1}for(int i =1; i <= n; i++)//找到入度等于0的点{if(!in[i])q[tail++]= i;//入度为0的点入队}int cnt =0;//计数while(head < tail)//队列不为空{int top = q[head++];//cnt++;in[top]--;//输出点的入度由0变为-1for(int i =1; i <= n; i++)//删除top的后继{if(mp[top][i]){in[i]--;if(!in[i])//判断入地是否为零q[tail++]= i;//入度为零的入队列}}}if(cnt == n)cout <<"YES"<< endl;elsecout <<"NO"<< endl;}return0;}//two STL队列#include<bits/stdc++.h>usingnamespace std;int mp[11][11];int in[11];voidToList(int n){queue<int>q;for(int i =1; i <= n; i++){if(!in[i])q.push(i);}int cnt =0;while(!q.empty()){int top = q.front();q.pop();cnt++;for(int i =1; i <= n; i++){if(mp[top][i]){in[i]--;if(!in[i])q.push(i);}}}if(cnt == n)cout <<"YES"<< endl;elsecout <<"NO"<< endl;}intmain(){int n, m;while(cin >> n >> m){memset(mp,0,sizeof(mp));memset(in,0,sizeof(in));while(m--){int u, v;cin >> u >> v;mp[u][v]=1;in[v]++;}ToList(n);}return0;}