博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu 1269 强连通判定
阅读量:6415 次
发布时间:2019-06-23

本文共 2469 字,大约阅读时间需要 8 分钟。

迷宫城堡

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 7097    Accepted Submission(s): 3159

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
 Accepted Code:
1 /************************************************************************* 2     > File Name: hdu_1269.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年08月06日 星期三 16时26分46秒 6     > Propose: hdu 1269 7  ************************************************************************/ 8  9 //强连通模板题10 #include 
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 using namespace std;19 20 const int maxn = 10002;21 22 struct SCC {23 vector
G[maxn];24 vector
rG[maxn];25 vector
vs;26 bool used[maxn];27 int cmp[maxn];28 int n, m;29 30 void init(int n) {31 this->n = n;32 for (int i = 0; i < n; i++) {33 G[i].clear();34 rG[i].clear();35 }36 vs.clear();37 }38 void AddEdge(int from, int to) {39 G[from].push_back(to);40 rG[to].push_back(from);41 }42 void dfs(int u) {43 used[u] = true;44 for (int i = 0; i < (int)G[u].size(); i++) {45 if (!used[G[u][i]]) dfs(G[u][i]);46 }47 vs.push_back(u);48 }49 void rdfs(int u, int k) {50 cmp[u] = k;51 used[u] = true;52 for (int i = 0; i < (int)rG[u].size(); i++) {53 if (!used[rG[u][i]]) rdfs(rG[u][i], k);54 }55 }56 int find_scc() {57 memset(used, false, sizeof(used));58 for (int i = 0; i < n; i++) {59 if (!used[i]) dfs(i);60 }61 memset(used, false, sizeof(used));62 int k = 0;63 for (int i = (int)vs.size()-1; i >= 0; i--) {64 if (!used[vs[i]]) rdfs(vs[i], k++);65 }66 return k;67 }68 };69 70 SCC A;71 72 int main(void) {73 int n, m;74 while (~scanf("%d %d", &n, &m) && (n || m)) {75 A.init(n);76 while (m--) {77 int a, b;78 scanf("%d %d", &a, &b);79 a--; b--;80 A.AddEdge(a, b);81 }82 int k = A.find_scc();83 if (k == 1) puts("Yes");84 else puts("No");85 }86 87 return 0;88 }

 

转载于:https://www.cnblogs.com/Stomach-ache/p/3899105.html

你可能感兴趣的文章
iOS混合开发库(GICXMLLayout)七、JavaScript篇
查看>>
instrument 调试 无法指出问题代码 解决
查看>>
继续聊聊MVVM和组件化
查看>>
理解缓存
查看>>
im也去中心化?Startalk(星语)的去中心化设计之路
查看>>
SpringBoot 实战 (六) | 用 JdbcTemplates 访问 Mysql
查看>>
BAT 经典算法笔试题 —— 磁盘多路归并排序
查看>>
实战项目积累
查看>>
一次完整的HTTP请求
查看>>
Swift 4 前后 KVO 的变化
查看>>
windows部署mongodb
查看>>
几道高级前端面试题解析
查看>>
使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)
查看>>
vueSSR: 从0到1构建vueSSR项目 --- vuex的配置(数据预取)
查看>>
11 Go语言的映射——map
查看>>
a标签可下载文件而ajax的get请求不行
查看>>
【Solidity】1.一个Solidity源文件的布局 - 深入理解Solidity
查看>>
Flask出现Error code 400, message Bad request syntax异常
查看>>
Brief introduction of how to 'Call, Apply and Bind'
查看>>
【Java并发】线程安全性
查看>>