HDU11269 迷宫城堡(强连通分量)
迷宫城堡
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 26892 Accepted Submission(s): 11446
1 2
2 3
3 1
3 3
1 2
2 3
3 2
0 0
No
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pii pair<int,int>
#define pil pair<int,ll>
#define fi head
#define se second
#define pb push_back
#define mkp make_pair
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3fll;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
const int maxn=;//点
const int maxm=;//边
struct Edge{
int v,nxt;
}edge[maxm];
int head[maxn],Stack[maxn],dfn[maxn],low[maxn],Belong[maxm];
int instack[maxn];
int n,m,cnt,Blocks,top,tot;
void Init()
{
cnt=;
Blocks=top=tot=;//初始化连通分量标号,次序计数器,栈顶指针为0
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
}
void AddEdge(int u,int v)
{
edge[tot].v=v;
edge[tot].nxt=head[u];
head[u]=tot++;
}
void Tarjan(int u)
{
int min,t;
dfn[u]=low[u]=++tot; //cnt为时间戳
instack[u]=; //标记在栈中
Stack[top++]=u; //入栈
for(int e=head[u];~e;e=edge[e].nxt)
{ //枚举v的每一条边
int v=edge[e].v; //u所邻接的边
if(!dfn[v])
{ //未被访问
Tarjan(v); //继续向下找
if(low[u]>low[v]) low[u]=low[v];//更新结点u所能到达的最小次数层
}
else if(instack[v]&&dfn[v]<low[u])//如果v结点在栈内
low[u]=dfn[v];
}
if(dfn[u]==low[u])
{ //如果节点v是强连通分量的根
Blocks++; //连通分量标号加1
do
{
t=Stack[--top]; //退栈
instack[t]=;//标记不在栈中
Belong[t]=Blocks; //出栈结点t属于Blocks标号的强连通分量
}while(t!=u); //直到将u从栈中退出
}
}
void solve()
{
for(int i=;i<=n;++i)//枚举每个结点,搜索连通分量
if(!dfn[i]) //未被访问
Tarjan(i);//则找i结点的连通分量
} int main()
{
while(scanf("%d%d",&n,&m)&&(n||m))
{
Init();
while(m--)
{
int u, v;
u=read(); v=read();
AddEdge(u,v);
}
solve();
if(Blocks==) printf("Yes\n");
else printf("No\n");
}
return ;
}
HDU11269 迷宫城堡(强连通分量)的更多相关文章
- 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 Submis ...
- hdoj 1269 迷宫城堡(强连通分量)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 思路分析:该问题要求判断是否每两个房间都可以相互到达,即求该有向图中的所有点是否只构成一个强连通 ...
- [SDOI2012]走迷宫 (强连通分量缩点,动态规划,高斯消元)
题面 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的 ...
- [hdu1269]城堡迷宫<tarjan强连通分量>
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 tarjan算法是oi里很常用的一个算法,在理解方面需要多下一些功夫,如果不行直接记模板也行,因 ...
- hdu1269迷宫城堡 (强连通Tarjan+邻接表)
Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说 ...
- hdu - 1269 迷宫城堡 (强连通裸题)
http://acm.hdu.edu.cn/showproblem.php?pid=1269 判断一个图是不是强连通,缩点之后判断顶点数是不是为1即可. #include <iostream&g ...
- HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU1269 迷宫城堡(裸强连通分量)
Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A ...
随机推荐
- Linux之ant安装部署
接下来呢,就开始ant的部署,具体分为如下几个步骤: 1. 获取介质: 在apache的官网中直接下载,下载地址为:http://ant.apache.org/ 下载需要的版本即可: 2. 复制到us ...
- Mybatis动态语句部分收集
where: <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BL ...
- java架构之路(MQ专题)kafka集群配置和简单使用
前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...
- PHP Swoole长连接常见问题
连接失效问题例子其中,Redis常见的报错就是: 配置项:timeout报错信息:Error while reading line from the serverRedis可以配置如果客户端经过多少秒 ...
- Ubuntu字符界面与图形界面的切换
1.按ALT+CTRL+F1切换到字符界面 2.按ALT+CTRL+F7切换到图形界面
- 理解Spark运行模式(三)(STANDALONE和Local)
前两篇介绍了Spark的yarn client和yarn cluster模式,本篇继续介绍Spark的STANDALONE模式和Local模式. 下面具体还是用计算PI的程序来说明,examples中 ...
- VS2017,遇到异常:这可能是由某个扩展导致的
网上看的解决办法没有解决,干脆自己亲自动手搞吧! 具体问题如下: 解决方案: 按照提示路径打开日志文件定位问题所在,打开之后,拉倒最后看到如下图所示: 我的问题是因为安装了一个叫 "Clau ...
- mysql 创建用户及授权(2)
一. MySQL初始密码 新安装的MySQL默认是没有密码的,设置初始密码可以用以下命 mysqladmin -u root password 'new-password' mysqladmin -u ...
- 从壹开始 [ Design Pattern ] 之一 ║ 设计模式开篇讲
缘起 不说其他的没用的开场白了,直接给大家分享三个小故事,都来自于我的读者粉丝(我厚着脸皮称为粉丝吧
- 安装win7和ubuntu16.04双系统
硬件:2012年本子 话硕A55V Service 准备: 首先通过一键还原备份win7系统!不清楚某些失误会不会备份也不能拯救! 清出100g硬盘空间,ubuntu会安装在这里 查看当前win7启 ...