设为首页 加入收藏

TOP

hdu5154--Harry and Magical Computer(拓扑排序)
2015-07-20 17:24:42 来源: 作者: 【 】 浏览:1
Tags:hdu5154--Harry and Magical Computer 拓扑 排序

Harry and Magical Computer Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Appoint description:

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 \leq n \leq 100, 1 \leq m \leq 10000$
The next following m lines, each line contains two numbers a b, indicates a dependencies (a, b). $1 \leq a, b \leq 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 

拓扑排序判断有无环

#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; }
      
     
    
   
  



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu4509 湫湫系列故事――减肥记I.. 下一篇hdu1695--GCD(欧拉函数+容斥原理..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)