迷宫城堡--hdu1269(连通图)
连通图模板题;
#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(连通图)的更多相关文章
- (连通图 模板题)迷宫城堡--hdu--1269
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1269 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)
迷宫城堡Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- HDU1269 迷宫城堡 2016-07-24 13:47 84人阅读 评论(0) 收藏
迷宫城堡 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的 ...
- HDU1269 迷宫城堡 —— 强连通分量
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU-1269 迷宫城堡(连通分量)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HD1269迷宫城堡(有向图 && 划分连通块)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1269 迷宫城堡 强连通分量
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1269 迷宫城堡
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...
- 迷宫城堡--HDOJ 1269(Tarjan)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- 【django】Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
问题描述:启动django服务时出现“Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试.”的错误 问题原因:8000端口被占用了 解决办法:默认启动的 ...
- butterknife用法总结
- thinkjs 中增加过期时间
使用thinkjs搭建的项目需要实现一小时后过期的功能:于是对比了新建项目与原有项目的不同之处: 官网中给的介绍:https://thinkjs.org/zh-cn/doc/2.2/a ...
- 使用API函数EnumWindows()枚举顶层窗口
http://simpleease.blog.163.com/blog/static/1596085820052770290/ 要枚举Windows当前所有打开的顶层窗口,可使用Windows A ...
- 多了解一下Chrome开发者控制台
多了解一下Chrome开发者控制台 2017年10月14日 • Tools, Web前端 • 1.0k views • 暂无评论 作为一名前端开发者,Chrome内置的控制台是必须了解的,它拥有非常丰 ...
- nginx介绍和安装
1.nginx的介绍 1.1 nginx的优势 1) 作为Web服务器,Nginx处理静态文件.索引文件,自动索引的效率非常高. 2) 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站 ...
- GitHub----初学习(一)
刚开始学习GitHub,在这借鉴一下别人的总结,http://youngxhui.github.io/2016/05/03/GitHub-for-Windows%E4%BD%BF%E7%94%A8%E ...
- 【git】 linux 环境安装git
1 安装git依赖包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUti ...
- 【大数据系列】hadoop集群的配置
一.hadoop的配置文件分类 1.只读类型的默认文件 core-default.xml hdfs-default.xml mapred-default.xml mapred-que ...
- [原]Linux下清空文件内容的三种方法
========问题======== 有些文件需要清空内容而不改变属性 =======解决方案====== 1.直接删除,创建同名文件.(这种方法的弊端是有可能这个文件带着权限或者是属性,那么你新建这 ...