迷宫城堡(HDU-1269)
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 0Sample 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)相关推荐
- 迷宫城堡 HDU - 1269 (塔尖算法求强连通分量)
为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以 ...
- HDU 1269 迷宫城堡 -- 强连通图判断
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1269 图的强连通分量 http://baike.baidu.com/link?url=NqsmNsGC ...
- 【HDU 1269】迷宫城堡 (Tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 【HDU - 1269】迷宫城堡 (tarjan算法模板)
题干: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只 ...
- HDU 1269 迷宫城堡(强连通图的判定)
最近<算法导论>快看完图论部分了,很多有关图的算法都彻底搞懂并加以证明了.现在主要是将理解的思想用到题目中来加强下.这个题目主要是判断一下整个图是否是强连通的,很简单,可以用tarjan也 ...
- HDU 1269 移动城堡 联通分量 Tarjan
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDOJ1269(迷宫城堡)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU1269 迷宫城堡(模板题)
HDU1269 迷宫城堡 文章目录 Problem Description 题解: Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N< ...
- Hdu 1269.迷宫城堡
Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若 ...
- HDU - 1269迷宫城堡 -强连通tanjar算法
为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以 ...
最新文章
- 2016第18本:世界上最简单的会计书
- JavaScript 表单验证
- cocos2d-x 3.0 画图节点——Node
- mysql5.7空间运算_msyql5.7数据类型和运算符
- java 象限分析_用四种象限分析你(未来的人生走向)
- Mysql学习第一课-mysql的定义及sql语句
- Wine——在Linux上运行Windows软件
- Python实战项目—金融量化分析(数据的简单预处理)
- andriod安装linux系统
- office 论文 页码_officexx论文页码【officexx设置论文页码】
- python网络安全协议_如果你不遵守Python中TCP和UDP等网络编程协议!那么你会自食其果...
- 【VBA研究】用Ping命令测试IP地址是否通达
- Java 7从入门到精通 前 言
- STMF103定时器
- c语言中 mf什么意思,mf是什么意思(单反相机的对焦怎么用)
- ArangoDB 多模型数据库概念
- LintCode(158)
- 期望、方差、协方差、协方差函数、期望函数、方差函数
- Codeforces 575C 状压+KM
- vue中 根据时间戳 判断对应的时间(今天 昨天 前天)