题目链接

迷宫城堡

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:
 /*************************************************************************
> File Name: hdu_1269.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年08月06日 星期三 16时26分46秒
> Propose: hdu 1269
************************************************************************/ //强连通模板题
#include <cmath>
#include <string>
#include <cstdio>
#include <vector>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ; struct SCC {
vector<int> G[maxn];
vector<int> rG[maxn];
vector<int> vs;
bool used[maxn];
int cmp[maxn];
int n, m; void init(int n) {
this->n = n;
for (int i = ; i < n; i++) {
G[i].clear();
rG[i].clear();
}
vs.clear();
}
void AddEdge(int from, int to) {
G[from].push_back(to);
rG[to].push_back(from);
}
void dfs(int u) {
used[u] = true;
for (int i = ; i < (int)G[u].size(); i++) {
if (!used[G[u][i]]) dfs(G[u][i]);
}
vs.push_back(u);
}
void rdfs(int u, int k) {
cmp[u] = k;
used[u] = true;
for (int i = ; i < (int)rG[u].size(); i++) {
if (!used[rG[u][i]]) rdfs(rG[u][i], k);
}
}
int find_scc() {
memset(used, false, sizeof(used));
for (int i = ; i < n; i++) {
if (!used[i]) dfs(i);
}
memset(used, false, sizeof(used));
int k = ;
for (int i = (int)vs.size()-; i >= ; i--) {
if (!used[vs[i]]) rdfs(vs[i], k++);
}
return k;
}
}; SCC A; int main(void) {
int n, m;
while (~scanf("%d %d", &n, &m) && (n || m)) {
A.init(n);
while (m--) {
int a, b;
scanf("%d %d", &a, &b);
a--; b--;
A.AddEdge(a, b);
}
int k = A.find_scc();
if (k == ) puts("Yes");
else puts("No");
} return ;
}

Hdu 1269 强连通判定的更多相关文章

  1. HDU 1269 迷宫城堡(强连通)

    HDU 1269 迷宫城堡 pid=1269" target="_blank" style="">题目链接 题意:中文题 思路:强连通模板题 代 ...

  2. HDU 1269 迷宫城堡 (Kosaraju)

    题目链接:HDU 1269 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000), ...

  3. hdu - 1269 迷宫城堡 (强连通裸题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 判断一个图是不是强连通,缩点之后判断顶点数是不是为1即可. #include <iostream&g ...

  4. HDU 1269:迷宫城堡(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:确定是否是一个强连通图. 思路:裸的tarjan算法. #include <cstdio> ...

  5. HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)

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

  6. 强连通 HDU 1269

    n点m边 求是否能从任意a->b b->a 强连通分量等于1 #include<stdio.h> #include<algorithm> #include<s ...

  7. hdu 1269 迷宫城堡 强连通分量

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

  8. HDU 1269 迷宫城堡 (强连通分量,常规)

    题意: 判断所给的有向图是否是一个强连通图. 思路: 如果连通分量大于1则必定No,如果强连通分量大于1也是No.tarjan算法求强连通分量. #include <cstdio> #in ...

  9. HDU 1269 迷宫城堡 tarjan算法求强连通分量

    基础模板题,应用tarjan算法求有向图的强连通分量,tarjan在此处的实现方法为:使用栈储存已经访问过的点,当访问的点离开dfs的时候,判断这个点的low值是否等于它的出生日期dfn值,如果相等, ...

随机推荐

  1. 《DSP using MATLAB》Problem 8.17

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  2. My solutions to the exercises in "The Boost C++ Libraries"

    I like books with excercises, but I also want solutions to see if I got it right. When working throu ...

  3. HttpException (0x80004005): 无法连接到 SQL Server 会话数据库

    ASP.NET 项目运行时出现错误提示:[HttpException (0x80004005): 无法连接到 SQL Server 会话数据库.] ,后排查问题发现是由于项目的Session模式是使用 ...

  4. myeclipse工程更新后java图标变为空心的解决办法

    今天用svn更新了工程发现目录结构改变了,同时所有的java文件的图标变成了空心的.解决办法如下 1.右键单击工程目录名,选择properties. 2.选择java bulid path,正常的应该 ...

  5. linux删除登录日志及历史命令

    参考:https://blog.51cto.com/study2008/2301555 基本常用清理linux日志: # echo > /var/log/wtmp //清除用户登录记录 # ec ...

  6. Elasticsearch系列(一)--入门

    Elasticsearch基于Lucene构建的开源搜索引擎,Java编写,提供restful API,支持横向拓展,能够完成海量数据处理. 应用场景: 1.海量数据分析引擎 2.站内搜索引擎 3.数 ...

  7. sql错误;The user specified as a definer ('tester'@'%') does not exist

    在复制和导数据库时提示错误:SELECT command denied to user 'tester'@'%' for column 'uID' in table 'view_enterprise_ ...

  8. grpc之protobuf常用语法速学

    1,语法速学(1):返回商品”数组”.repeated修饰符 Repeated:是一个修饰符,返回字段可以重复任意多次(包括0次) 可以认为就是一个数组(切片) 服务端: 创建protobuf文件 s ...

  9. MATLAB---fopen、fprintf函数

    1 概述 fopen()是个将数据按指定格式读入到matlab中的函数. fprintf()是个将数据按指定格式写入到文本文件中的函数. 2 用法 2.1 fopen函数 matlab中fopen函数 ...

  10. JasperReport编译报表设计5

    我们在前面的章节中产生的JasperReport模板(JRXML文件).这个文件不能直接用于生成报告.它必须被编译成JasperReport的“本地二进制"格式,称为Jasperfile.在 ...