寻找一个迷宫是否是仅仅有一个最大强连通图。

使用Tarjan算法去求解,经典算法。必需要学习好,要自己创造出来是十分困难的了。

參考资料:https://www.byvoid.com/blog/scc-tarjan/

const int N = 10001;

vector<int> gra[N];
stack<int> stk;
bool inStack[N];
int dfsNum[N];
int backTrackNum[N];
int cur, sum;
int n, m; void Tarjan(int u)
{
inStack[u] = true;
dfsNum[u] = backTrackNum[u] = ++cur;
stk.push(u); for (int i = 0; i < (int)gra[u].size(); i++)
{
int v = gra[u][i];
if (!dfsNum[v]) Tarjan(v), backTrackNum[u] = backTrackNum[v] < backTrackNum[u]? backTrackNum[v] : backTrackNum[u];
else if (inStack[v]) backTrackNum[u] = backTrackNum[v] < backTrackNum[u]? backTrackNum[v] : backTrackNum[u];
}
if (backTrackNum[u] == dfsNum[u])
{
++sum;
while (stk.size())
{
int v = stk.top(); stk.pop();
inStack[v] = false;
if (u == v) break;
}
}
} void solveTarjan()
{
sum = cur = 0;
memset(dfsNum, 0, sizeof(dfsNum));
for (int i = 1; i <= n; i++)
{
if (!dfsNum[i]) Tarjan(i);
}
} void initGraph()
{
int a, b;
for (int i = 1; i <= n; i++) gra[i].clear();//别忘了清空
for (int i = 0; i < m; i++)
{
scanf("%d %d", &a, &b);
gra[a].push_back(b);
}
} int main()
{
while (scanf("%d %d", &n, &m) && n)
{
initGraph();
solveTarjan();
if (sum == 1) puts("Yes");
else puts("No");
}
return 0;
}

HDU 1269 迷宫城堡 最大强连通图题解的更多相关文章

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

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

  2. hdu 1269 迷宫城堡

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

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

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

  4. hdu 1269 迷宫城堡(Targin算法)

    ---恢复内容开始--- 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

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

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

  6. hdu 1269 迷宫城堡 最简单的联通图题 kosaraju缩点算法

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

  7. HDU 1269.迷宫城堡-Tarjan or 双向DFS

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

  8. HDU 1269 迷宫城堡 (Kosaraju)

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

  9. HDU 1269 迷宫城堡(DFS)

    迷宫城堡 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的 ...

随机推荐

  1. samba的安装及其使用

    参考pdf文档:https://pan.baidu.com/s/1iPJ1iPtNx7ZXNHRurrjfqw centos7 samba配置#centos7安装Sambayum -y install ...

  2. select 修改选中时候的默认默认样式 outline:none 把系统的线关了 然后自己再border一下

    chrome 查看样式的时候默认没有 focus的样式,可以把选择器开开select 修改选中时候的默认默认样式 outline:none 把系统的线关了 然后自己再border一下input:foc ...

  3. ActiveX控件获取不到对象属性或者方法的原因分析

    1.找不到调用的DLL或程序: 2.调用控件方法名称,与定义的函数名称不符合: 3.如果是网站网页调用ActiveX,检查控件是否添加安全对象: 4.如果是网站网页调用ActiveX,检查网页是否加入 ...

  4. mac apache 配置

    mac系统自带apache这无疑给广大的开发朋友提供了便利,接下来是针对其中的一些说明 一.自带apache相关命令 1. sudo apachectl start 启动服务,需要权限,就是你计算机的 ...

  5. 树莓派 -- bcm2835 library (1)

    bcm2835 library提供了user space 操作IO的代码. 本文不涉及代码分析,先直观的按照user guide完成操作. 1. 在Raspberry中安装bcm2835 librar ...

  6. Win7解决无法在资源管理器中连接FTP问题

    需要连接FTP站点,但是又不想使用任何工具,使用电脑自带的资源管理器实现连接. 一般来说是能正常连接没有问题的,但是存在个别电脑不行. 试过好多办法不行,如下办法方法管用. 复制以下代码,本地保存为R ...

  7. PHP:图片上传

    文章来源:http://www.cnblogs.com/hello-tl/p/7593033.html <?php class TL_Update_File{ private $file = n ...

  8. 每周一赛(E题,广搜求方案)

    Description In this problem, you are given an integer number s. You can transform any integer number ...

  9. ARM中的---汇编指令

    一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是"以下是代码段& ...

  10. Leetcode 207.课程表

    课程表 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总 ...