Problem Description

为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。

Input

输入包含多组数据,输入的第一行有两个数:N和M,接下来的M行每行有两个数a和b,表示了一条通道可以从A房间来到B房间。文件最后以两个0结束。

Output

对于输入的每组数据,如果任意两个房间都是相互连接的,输出"Yes",否则输出"No"。

Sample Input

3 3
1 2
2 3
3 1
3 3
1 2
2 3
3 2
0 0

Sample Output

Yes
No

思路:实质是要判断图是否为一强连通图,Tarjan 算法求强连通分量,判断是否为1即可

Source Program

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<ctime>
#include<vector>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 20001
#define MOD 16007
#define E 1e-6
#define LL long long
using namespace std;
int n,m;
vector<int> G[N];
stack<int> S;
int dfn[N],low[N];
bool vis[N];
int sccno[N];
int block_cnt;
int sig;
void Tarjan(int x){vis[x]=true;dfn[x]=low[x]=++block_cnt;S.push(x);for(int i=0;i<G[x].size();i++){int y=G[x][i];if(vis[y]==false){Tarjan(y);low[x]=min(low[x],low[y]);}else if(!sccno[y])low[x]=min(low[x],dfn[y]);}if(dfn[x]==low[x]){sig++;while(true){int temp=S.top();S.pop();sccno[temp]=sig;if(temp==x)break;}}
}
int main()
{while(scanf("%d%d",&n,&m)!=EOF&&(m+n)){for(int i=1;i<=n;i++)G[i].clear();while(m--){int x,y;scanf("%d%d",&x,&y);G[x].push_back(y);}sig=0;block_cnt=0;memset(vis,0,sizeof(vis));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(sccno,0,sizeof(sccno));for(int i=1;i<=n;i++)if(vis[i]==false)Tarjan(i);if(sig==1)printf("Yes\n");elseprintf("No\n");}
}

迷宫城堡(HDU-1269)相关推荐

  1. 迷宫城堡 HDU - 1269 (塔尖算法求强连通分量)

    为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以 ...

  2. HDU 1269 迷宫城堡 -- 强连通图判断

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1269 图的强连通分量 http://baike.baidu.com/link?url=NqsmNsGC ...

  3. 【HDU 1269】迷宫城堡 (Tarjan算法)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. 【HDU - 1269】迷宫城堡 (tarjan算法模板)

    题干: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只 ...

  5. HDU 1269 迷宫城堡(强连通图的判定)

    最近<算法导论>快看完图论部分了,很多有关图的算法都彻底搞懂并加以证明了.现在主要是将理解的思想用到题目中来加强下.这个题目主要是判断一下整个图是否是强连通的,很简单,可以用tarjan也 ...

  6. HDU 1269 移动城堡 联通分量 Tarjan

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. HDOJ1269(迷宫城堡)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. HDU1269 迷宫城堡(模板题)

    HDU1269 迷宫城堡 文章目录 Problem Description 题解: Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N< ...

  9. Hdu 1269.迷宫城堡

    Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若 ...

  10. HDU - 1269迷宫城堡 -强连通tanjar算法

    为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以 ...

最新文章

  1. 2016第18本:世界上最简单的会计书
  2. JavaScript 表单验证
  3. cocos2d-x 3.0 画图节点——Node
  4. mysql5.7空间运算_msyql5.7数据类型和运算符
  5. java 象限分析_用四种象限分析你(未来的人生走向)
  6. Mysql学习第一课-mysql的定义及sql语句
  7. Wine——在Linux上运行Windows软件
  8. Python实战项目—金融量化分析(数据的简单预处理)
  9. andriod安装linux系统
  10. office 论文 页码_officexx论文页码【officexx设置论文页码】
  11. python网络安全协议_如果你不遵守Python中TCP和UDP等网络编程协议!那么你会自食其果...
  12. 【VBA研究】用Ping命令测试IP地址是否通达
  13. Java 7从入门到精通 前 言
  14. STMF103定时器
  15. c语言中 mf什么意思,mf是什么意思(单反相机的对焦怎么用)
  16. ArangoDB 多模型数据库概念
  17. LintCode(158)
  18. 期望、方差、协方差、协方差函数、期望函数、方差函数
  19. Codeforces 575C 状压+KM
  20. vue中 根据时间戳 判断对应的时间(今天 昨天 前天)

热门文章

  1. 别再传李笑来的录音了!这才是有关区块链最靠谱最简单易懂的科普
  2. JAVA版开源微信管家—JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗
  3. JEECG 版本更新日志
  4. Linux - Redis介绍以及安装 (简易版本)
  5. 基于百度地图API的微信周边搜索
  6. 数据结构基础(11) --循环链表的设计与实现
  7. gulp学习笔记,基本使用流程,基本函数,使用监听、插件
  8. 互斥锁、死锁、递归锁、信号量、Event
  9. js+jquery手写弹出提示框
  10. webapp开发学习--Ionic+Cordova 环境搭建