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.Output
Output one line for each test case.Sample Input
3 2 3 1 2 1 3 3 3 2 2 1 1 3
Sample Output
YES NO
拓撲排序判斷有無環
#include#include #include #include using namespace std ; int in[120] ; int Map[120][120] ; queue que ; int main() { int n , m , u , v , i ; while( scanf("%d %d", &n, &m) != EOF ) { while( !que.empty() ) que.pop() ; memset(in,0,sizeof(in)) ; memset(Map,0,sizeof(Map)) ; while(m--) { scanf("%d %d", &u, &v) ; Map[v][u]++ ; in[u]++ ; } for(i = 1 ; i <= n ; i++) if( in[i] == 0 ) que.push(i) ; while( !que.empty() ) { u = que.front() ; que.pop() ; for(i = 1 ; i <= n ; i++) { if( Map[u][i] != 0 ) { in[i] -= Map[u][i] ; Map[u][i] = 0 ; if( in[i] == 0 ) que.push(i) ; } } } for(i = 1 ; i <= n ; i++) if( in[i] ) break ; if( i <= n ) printf("NO\n") ; else printf("YES\n") ; } return 0; }