#include #include #include using namespace std; int relation[108]; int find(int person){//查找 int temp=person; while(relation[temp]!=temp)//返回根 temp=relation[temp]; int temp2=person,temp3; while(relation[temp2]!=temp){//优化 temp3=relation[temp2]; relation[temp2]=temp; temp2=temp3; } return temp; } void union_(int son,int father){//并集 int findson=find(son);//找到根 int findfather=find(father); if(findson!=findfather){//根不相同 relation[findson]=findfather;//合并 } } int main() { int numOfPoints,numOfSections; int graph[108][108]; int in[108],out[108]; int count; queue que; while(cin>>numOfPoints>>numOfSections){ count=0; while(!que.empty()){ que.pop(); } int a,b; memset(graph,0,sizeof(graph)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); for(int i=1;i<=numOfSections;i++){ cin>>a>>b; out[a]++; in[b]++; graph[a][b]++; } for(int i=1;i<=numOfPoints;i++){ if(in[i]==0){ count++; que.push(i); } } while(!que.empty()){ int front=que.front(); que.pop(); for(int i=1;i<=numOfPoints;i++){ if(graph[front][i]){ in[i]-=graph[front][i]; if(in[i]==0){ que.push(i); count++; } } } } if(count==numOfPoints) cout<<"YES"<