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 ...
随机推荐
- Android Debug 之 Log 最佳实践
本文微信公众号「AndroidTraveler」首发. 背景 在开发过程中,调试是必不可少的一项工作. 当我们要确定项目的逻辑时,当我们要了解界面的生命周期时,当我们发现新写的逻辑与期望效果不一致时, ...
- Linux常用命令复习
1> 查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. Linux文件或者目录名称最长可以有265个字符,“.”代 ...
- Mybatis精讲(二)---生命周期
目录 回顾 SqlSessionFactoryBuilder SqlSessionFactory openSessionFromDataSource Executor SqlSession Mappe ...
- vim用户手册笔记常用操作整理
"x"命令可以删除一个字符 "d"命令可以后跟任何一个位移命令,它将删除从当前光标起到位移的终点处的文本内容dw "c",改变命令例如cw ...
- 2019-10-16:渗透测试,基础学习,burpsuit笔记
maccms10后门分析下载网址,是假官网http://www.maccmsv10.com/download.htmlMaccms10基于php+mysql的maccms,是苹果的内容管理,方便使用, ...
- 在ensp上模拟企业网络场景并Access接口加入相应VLAN
模拟的企业网络大概描述: 公司内网是一个大的局域网,二层交换机S1放置在一楼,在一楼办公的部门有IT部和人事部:二层交换机S2放置在二楼,在二楼办公的部门有市场部和研发部.由于交换机组成的是广播网,交 ...
- 【原创】(十二)Linux内存管理之vmap与vmalloc
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- Selenium+Java(五)iframe/frame多表单处理
前言 如果网页中使用了frame,则在使用Selenium定位元素时需要切换到对应的frame,否则会定位不到需要的元素. 切换到需要切换的frame中 driver.switchTo().frame ...
- Linux三个比较特殊的权限
Linux还有三个比较特殊的权限,分别是:setuid,setgid,stick bit . -:表示一般文件 d:表示目录文件 l:表示链接文件 b:表示块设备 c:表示字符设备 p:表示管道 s: ...
- Git使用和介绍-基础指令
转载请标明出处:http://blog.csdn.net/shensky711/article/details/52210625 本文出自: [HansChen的博客] 查看已有配置 取消已有的配置 ...