标签:des style blog http color java os io
迷宫城堡
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7097 Accepted Submission(s): 3159Problem 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 Input3 3 1 2 2 3 3 1 3 3 1 2 2 3 3 2 0 0
Sample OutputYes No
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 <cmath>
11 #include <string>
12 #include <cstdio>
13 #include <vector>
14 #include <fstream>
15 #include <cstring>
16 #include <iostream>
17 #include <algorithm>
18 using namespace std;
19
20 const int maxn = 10002;
21
22 struct SCC {
23 vector<int> G[maxn];
24 vector<int> rG[maxn];
25 vector<int> 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 }
标签:des style blog http color java os io
原文地址:http://www.cnblogs.com/Stomach-ache/p/3899105.html