题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269

思路分析:该问题要求判断是否每两个房间都可以相互到达,即求该有向图中的所有点是否只构成一个强连通图分量,使用Tarjan算法即可求解;

代码如下:

#include <stack>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int MAX_N = + ;
vector<int> G[MAX_N];
stack<int> S;
int pre[MAX_N], lowlink[MAX_N], scc_no[MAX_N];
int dfs_clock, scc_cnt; inline int Min(int a, int b) { return a < b ? a : b; }
void Dfs(int u)
{
pre[u] = lowlink[u] = ++dfs_clock;
S.push(u); for (int i = ; i < G[u].size(); ++i)
{
int v = G[u][i]; if (!pre[v])
{
Dfs(v);
lowlink[u] = Min(lowlink[u], lowlink[v]);
} else if (!scc_no[v])
lowlink[u] = Min(lowlink[u], lowlink[v]);
}
if (lowlink[u] == pre[u])
{
scc_cnt++;
for (;;)
{
int x = S.top();
S.pop();
scc_no[x] = scc_cnt;
if (x == u) break;
}
}
} inline void FindScc(int n)
{
dfs_clock = scc_cnt = ;
memset(pre, , sizeof(pre));
memset(lowlink, , sizeof(lowlink));
memset(scc_no, , sizeof(scc_no));
for (int i = ; i <= n; ++i)
if (!pre[i]) Dfs(i);
} int main()
{
int ver_num, road_num; while (scanf("%d %d", &ver_num, &road_num) != EOF
&& (ver_num + road_num))
{
int ver_1, ver_2; for (int i = ; i < MAX_N; ++i)
G[i].clear( );
for (int i = ; i < road_num; ++i)
{
scanf("%d %d", &ver_1, &ver_2);
G[ver_1].push_back(ver_2);
}
FindScc(ver_num);
while (!S.empty( ))
S.pop( );
if (scc_cnt > )
printf("No\n");
else
printf("Yes\n");
}
return ;
}

hdoj 1269 迷宫城堡(强连通分量)的更多相关文章

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

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

  2. HDU1269 迷宫城堡 —— 强连通分量

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    M ...

  3. HDU11269 迷宫城堡(强连通分量)

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

  4. hdoj 1269 迷宫城堡【scc基础题目】

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

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

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

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

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

  7. hdu 1269 迷宫城堡

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...

  8. HDUOJ ---1269迷宫城堡

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

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

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

随机推荐

  1. VC++学习之进程和线程的区别

    VC++学习之进程和线程的区别 一.进程        进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格.内存空间.磁盘 ...

  2. CSS 与 HTML5 响应式图片

    什么是响应式图片? 响应式图片是指:用户代理根据输出设备的分辨率不同加载不同类型的图片,不会造成带宽的浪费.同时,在改变输出设备类型或分辨率时,能及时加载对应类型的图片. CSS3 响应式图片 对于很 ...

  3. 搭建Ubuntu环境中的Error [dpkg 被中断,您必须手工运行 sudo dpkg --configure -a 解决此问题][安装Flashplayer出错 ]

    //解决方法如下: sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo dpkg -r flashplugin-i ...

  4. Dos命令之Netsh

    NetSH (Network Shell) 是windows系统本身提供的功能强大的网络配置命令行工具. 常用命令 1. 导出配置脚本:netsh -c interface ip dump > ...

  5. IIS启动网站

    在启动一个网站前要先打开一个服务.可是Windows 的提示非常的奇怪: “除非 Windows Activation Service (WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法 ...

  6. Hadoop2.0安装

    http://blog.csdn.net/samhacker/article/details/18802223 http://blog.csdn.net/crazyhacking/article/de ...

  7. mysql null值问题

    mysql> create table test( sn int, -> `createdTime` datetime NOT NULL COMMENT '创建时间', -> `up ...

  8. 怎样从一个DLL中导出一个C++类

    原文作者:Alex Blekhman    翻译:朱金灿 原文来源: http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx 译 ...

  9. 【iOS-Android开发对照】之 数据存储

    [iOS-Android开发对照]之 数据存储 写在前面的话 相比Android和iOS,我认为Android的数据存储更开放一些.Android天生就能够使用多Java I/O:并且天生开放的特性, ...

  10. css--技巧整理(1-13)

    (更新中) 1.取消浏览器form中默认样式 a.chrome下input和textarea的聚焦边框 input,button,select,textarea{outline:none}  b.取消 ...