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 ...
随机推荐
- kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用
1. Ratel是什么? Ratel是一个Kubernetes资源平台,基于管理Kubernetes的资源开发,可以管理Kubernetes的Deployment.DaemonSet.Stateful ...
- C++中对C的扩展学习新增内容———面向对象(封装)
面向对象(封装) 1.对封装的理解: 1.封装就是把变量和函数放在一起统一表示某一个食物. class 2.给类内部的成员增加访问控制权限. 3.封装的语法就是class定义一个类. 2.给对象成员增 ...
- 系统信息命令(uname、dmesg、df、hostname、free)
uname 显示计算机及操作系统相关的信息,uname -a显示全部信息,uname -r内核的发行号,各种信息可以有单独的选项分别指出 [lixn@Fedora24 ~]$ uname -a Lin ...
- ubuntu server 1604 关机和重启
命令有很多,记住以下两三个就够了 重启: sudo reboot (这个短,易记) sudo shutdown -r now 统一的shutdown形式 关机:sudo shutdown -P no ...
- JavaWeb04-JSP及会话跟踪技术
JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 1.2 JSP的 ...
- [FPGA]浅谈LCD1602字符型液晶显示器(Verilog)
目录 概述 LCD1602 LCD1602是什么? LCD1602的管脚 RS_数据/命令选择 E_使能 D0-D7 LCD1602有个DDRAM LCD1602还有个CGROM 指令集 清屏 进入模 ...
- AE安装部署以及监测ArcEngine runtime 9.3是否安装
目的:用ArcEngine9.3开发项目以后,用Visual Studio2008打包工具打包: 同时监测别的机器上是否有ArcEngine Runtime或者Desktop的支持. 解决方案: 1. ...
- 线程中synchronized关键字和lock接口的异同
一.synchronized关键字 1.可以用来修饰代码块 synchronized (this) { // 同步的关键字 this 表示当前线程对象 if (num == 0) { break; } ...
- Elasticsearch系列---全面了解Document
概要 本篇主要介绍一下document的知识,对document的元数据和基本的语法进行讲解. document核心元数据 前面入门实战一节有简单介绍过document数据示例,这次我们来详细了解一下 ...
- 新闻实时分析系统-Flume+HBase+Kafka集成与开发
1.下载Flume源码并导入Idea开发工具 1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压 2)通过idea导入flume源码 打开idea开发工具,选择File ...