题目链接

连通图模板题;

 
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define maxn 10005
int dfn[maxn];///代表最先遍历到这个点的时间
int low[maxn];///这个点所能到达之前最早的时间点
int Stack[maxn];///自定义的栈,比较好用
int cnt, bloks;///cnt总的连通个数, 连通块的总个数
bool InStack[maxn];///判断这个点是否在栈中
int n, m, Time, top;///Time 时间点, top用于栈操作
vector<vector<int> > G;
void
Tarjan(int u)
{

low[u] = dfn[u] = ++Time;///更新时间点
Stack[top++] = u;///将u压入栈中
InStack[u] = true;
int
len = G[u].size(), v;///深度优先遍历与u相连的所有节点

for
(int i=; i<len; i++)
{

v = G[u][i]; if(!dfn[v])///我们可以用dfn判断这个点是否曾经被遍历过
{///若是没被遍历过,那么我们就遍历一下
Tarjan(v);
///假如u点下方节点v可以到达的点那么u点也一定能到达
low[u] = min(low[u], low[v]);
///在两者中取一个最小的,到达点
}
else if
( InStack[v] )
/**如果遍历的这个点已经在栈中了,那么就需要更新一下,这里其实写成low[u] = min(low[u],low[v])也可以肯定是没错的,但是
在我们求割点的时候就必须要写成low[u] = min(low[u], dfn[v]),到求割点的时候我们会好好解释一下*/
low[u] = min(low[u], dfn[v]);
}

/**当这个节点的所有节点已经遍历完了并且 low[u] == dfn[u],这个时候说明我们已经返回到了这个点的最初的时间点的位置
将我们栈中的所有元素出栈就可以完成连通图求解了*/
if
(low[u] == dfn[u])
{

do

{

cnt ++;
v = Stack[--top];
InStack[v] = false;
}
while(u != v);
bloks ++;
}
}

void
Init()
{

G.clear();
G.resize(n+);
memset(low,, sizeof(low));
memset(dfn,, sizeof(dfn));
memset(Stack,, sizeof(Stack));
memset(InStack, false, sizeof(InStack));
bloks = cnt = Time = top =;
}
int main()
{

while
(scanf("%d %d",&n, &m), n+m)
{

Init();
while
(m --)
{

int
a, b;
scanf("%d %d", &a, &b);
G[a].push_back(b);
}

Tarjan();
if
( cnt == n && bloks == )
puts("Yes");
else

puts("No");
}

return
;
}

迷宫城堡--hdu1269(连通图)的更多相关文章

  1. (连通图 模板题)迷宫城堡--hdu--1269

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1269 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  2. HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)

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

  3. HDU1269 迷宫城堡 2016-07-24 13:47 84人阅读 评论(0) 收藏

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

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

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

  5. HDU-1269 迷宫城堡(连通分量)

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

  6. HD1269迷宫城堡(有向图 && 划分连通块)

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

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

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

  8. hdu 1269 迷宫城堡

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

  9. 迷宫城堡--HDOJ 1269(Tarjan)

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

随机推荐

  1. sharepoint权限操作(记录以备忘)

    using Microsoft.SharePoint; using System; using System.Collections.Generic; using System.Linq; using ...

  2. 设置开机自启动VirtualBox虚拟机系统

    如果常用VirtualBox虚拟机系统的话,设置个随开机启动也是很方便的.不需要打开VirtualBox窗口,直接就是系统启动了. 又继续上网搜索学习了.(设置开机自启动VirtualBox虚拟机系统 ...

  3. Java API方式调用Kafka各种协议

    众所周知,Kafka自己实现了一套二进制协议(binary protocol)用于各种功能的实现,比如发送消息,获取消息,提交位移以及创建topic等.具体协议规范参见:Kafka协议  这套协议的具 ...

  4. Swift - 构造函数

    Swift 2.0 构造函数基础 构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为对象成员变量设置初始值,在 OC 中的构造函数是 initWithXXX,在 Swift 中由于支持函数重 ...

  5. Android学习之DatePicker和TimePicker

    在Android开发的应用程序中,通常都会有时间和日期选择的需求,下面就对日期选择控件DatePicker和时间选择控件TimePicker的基本使用方法进行介绍:        DatePicker ...

  6. 解决Sublime Text 3中文显示乱码问题(转)

    解决Sublime Text 3中文显示乱码问题(转) 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: 2.重 ...

  7. luanet性能测试

    测试环境 intel-i5 双核 2.53HZ 服务器客户端均在本机运行 测试内容:echo回射,每个包的字节数在20字节内 luanet 连接数 每秒回射数 1 19,000/s 10 12,500 ...

  8. What you should know about .so files

    In its early days, the Android OS was pretty much supporting only one CPU architecture: ARMv5.Do you ...

  9. 解决VMware安装Ubuntu的过程中窗口过小无法看到按钮的问题

    最近在用VMware安装Ubuntu的时候,发现竟然只能看到部分界面,鼠标拖拽也没有用,就是看不到完整的界面,那要我怎么按下一步啊~(真是哭笑不得%>_<%),或者按TAB键,靠自己的想象 ...

  10. 路由器子网掩码设置不正确导致github无法访问

    奇怪的现象,路由器子网掩码设置成255.0.0.0会导致电脑访问不到https://github.com/ 改成默认的255.255.255.0就正常了.