Harry and Magical Computer


Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 288    Accepted Submission(s): 131

Problem Description


In reward of being yearly outstanding magic student, Harry gets a magical computer. When the computer begins to deal with a process, it will work until the ending of the processes. One day the computer got n processes to deal with. We number the processes from 1 to n. However there are some dependencies between some processes. When there exists a dependencies (a, b), it means process b must be finished before process a. By knowing all the m dependencies, Harry wants to know if the computer can finish all the n processes.


Input


There are several test cases, you should process to the end of file.
For each test case, there are two numbers n m on the first line, indicates the number processes and the number of dependencies. 1≤n≤100,1≤m≤10000
The next following m lines, each line contains two numbers a b, indicates a dependencies (a, b). 1≤a,b≤n


Output


Output one line for each test case.
If the computer can finish all the process print "YES" (Without quotes).
Else print "NO" (Without quotes).


Sample Input


3 2 3 1 2 1 3 3 3 2 2 1 1 3


Sample Output


YES NO


/*
HDU 5154 拓扑排序
拓扑排序,判断最后所以的点的度数是否都为0
*/
#include<iostream>
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define N 105
vector<int> map[N];
int ru[N];
int main()
{
int m,n,a,b,i,f;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(ru,0,sizeof(ru));
for(i=1;i<=n;i++)
map[i].clear();
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
map[b].push_back(a);
ru[a]++;
}
queue<int> que;
for(i=1;i<=n;i++)
if(ru[i]==0)
que.push(i);
while(!que.empty())
{
a=que.front();
que.pop();
for(i=0;i<map[a].size();i++)
{
b=map[a][i];
ru[b]--;
if(ru[b]==0)
que.push(b);
}
}
f=1;
for(i=1;i<=n;i++)
if(ru[i])
{
f=0;
break;
}
printf("%s\n",f?"YES":"NO");
}
return 0;
}