码迷,mamicode.com
首页 > 其他好文 > 详细

【数算A】舰队、海域出击!

时间:2017-11-18 12:46:26      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:node   bsp   size   scanf   搜索   ring   就是   路径   main   

就是判断一个有向图是否有环,注意图可能不连通。

用dfs搜一下就行了。

 1 #include<cstdio>
 2 #include<cstring>
 3 int n,m,t,h[100001],v[100001];
 4 struct node{
 5     int next,to;
 6 }e[500001];
 7 int dfs(int i){
 8     v[i]=-1;
 9     for(int j=h[i];j;j=e[j].next){
10         int t=e[j].to;
11         if(v[t]<0) return 0;              //如果和它邻接的边也在搜索栈中,说明是环 
12         else if(!v[t]&&!dfs(t)) return 0; //即使没在搜索栈,但是它的下一条边不符合
13     }
14     v[i]=1; return 1;  //包含当前结点的路径搜完了且无环路 
15 }
16 int check(){
17     for(int i=1;i<=n;i++)
18         if(!v[i])
19             if(!dfs(i)) return 0; //0表示有环,1表示无环 
20     return 1;
21 }
22 int main()
23 {
24     scanf("%d",&t);
25     while(t--){
26         memset(v,0,sizeof v);
27         memset(h,0,sizeof h);     //注意到h[]也要初始化 
28         scanf("%d%d",&n,&m);
29         for(int i=1;i<=m;i++){
30             int x,y;
31             scanf("%d%d",&x,&y);
32             e[i].next=h[x];
33             e[i].to=y;
34             h[x]=i;
35         }
36         if(check()) printf("No\n");
37         else printf("Yes\n");
38     }
39 }

 

【数算A】舰队、海域出击!

标签:node   bsp   size   scanf   搜索   ring   就是   路径   main   

原文地址:http://www.cnblogs.com/sulley/p/7856268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!