hdu 1269 迷宫城堡(强连通)
来源:互联网 发布:招商迪辰软件 编辑:程序博客网 时间:2024/06/10 18:43
题意:给定一个有向图,求该图是不是强连通的。
思路:从某点出发,正向和反向两次遍历图,如果都能到达所有点,则该图是强连通的。
强连通:在一个有向图G中,如果任意两点v1、v2存在v1到v2和v2到v1的路径,则称该图是强连通的。
#include<stdio.h>#include<string.h>#define N 10005#define M 100005int path[2][M],next[2][M],head[2][N],vis[2][N];int cnt;void addEdge(int a,int b){ path[0][cnt]=b,next[0][cnt]=head[0][a],head[0][a]=cnt; path[1][cnt]=a,next[1][cnt]=head[1][b],head[1][b]=cnt++;}int dfs(int key,int index){ vis[key][index]=1; for(int i=head[key][index];i!=-1;i=next[key][i]) { int cur=path[key][i]; if(vis[key][cur]) continue; dfs(key,cur); } return 0;}int judge(int n){ for(int i=1;i<=n;i++) { if(!vis[0][i]||!vis[1][i]) return 0; } return 1;}int main(){ int n,m; while(scanf("%d%d",&n,&m)) { if(n==0&m==0) break; cnt=0; memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); addEdge(a,b); } memset(vis,0,sizeof(vis)); dfs(0,1); dfs(1,1); if(judge(n)) printf("Yes\n"); else printf("No\n"); } return 0;}
0 0
- HDU 1269 迷宫城堡(强连通)
- hdu 1269 迷宫城堡(强连通)
- hdu 1269 迷宫城堡 强连通分量
- HDU 1269 迷宫城堡 强连通
- HDU 1269 迷宫城堡(强连通分量)
- 【HDU】1269 迷宫城堡 强连通
- HDU 1269 迷宫城堡(强连通分量)
- HDU 1269-迷宫城堡(强连通分量)
- HDU - 1269 迷宫城堡(强连通分量)
- [HDU 1269] 迷宫城堡 强连通分量
- hdu 1269 迷宫城堡 强连通分量
- hdu 1269 迷宫城堡【强连通+Kosaraju】
- hdu 1269 迷宫城堡【强连通Tarjan】
- hdu 1269 迷宫城堡 强连通分量
- 【HDU】 1269 迷宫城堡 强连通分量
- HDU-#1269 迷宫城堡(Tarjan+强连通)
- HDU 1269 迷宫城堡(强连通图的判定)
- hdu 1269 迷宫城堡(强连通 tarjan )
- java instancof关键字
- Spring MVC 学习注意点
- Centos安装MySQLdb记录
- DNS
- Windows编程学习笔记 lesson1 windows编程初解、数据类型
- hdu 1269 迷宫城堡(强连通)
- 图解集合3:CopyOnWriteArrayList
- h264源码分析[1]
- web前端-JavaScript 保留关键字 -026
- ES6学习17(SIMD)
- IntelliJ IDEA 中详细图解记录如何连接MySQL数据库
- ORACLE initialization or shutdown in progress
- 静态网页
- 左填充