Description
Input
Output
Sample Input
3 2 3 1 2 1 3 3 3 2 2 1 1 3
Sample Output
YES NO
拓扑排序判断有无环
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std ; int in[120] ; int Map[120][120] ; queue <int> 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; }
hdu5154--Harry and Magical Computer(拓扑排序)
原文:http://blog.csdn.net/winddreams/article/details/42531259