HDOJ 1269 迷宫城堡
2014-10-08 09:26
246 查看
题意:判断有向图中是否存在任意点n到各点都为连通
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269
思路:强连通分量,tarjan,判断强连通分量的数量,直接套模板了。
以下为AC代码:
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269
思路:强连通分量,tarjan,判断强连通分量的数量,直接套模板了。
以下为AC代码:
Run ID | Submit Time | Judge Status | Pro.ID | Exe.Time | Exe.Memory | Code Len. | Language | Author |
11822308 | 2014-10-08 09:19:41 | Accepted | 1269 | 78MS | 1848K | 1169 B | G++ | luminous11 |
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<stack> using namespace std; #define MAX_V 11111 int V, E; int dfn[MAX_V], low[MAX_V]; bool instack[MAX_V]; int din; int cnt; stack<int> s; vector<int> Edge[MAX_V]; void tarjan ( int x ) { instack[x] = true; dfn[x] = low[x] = din++; s.push ( x ); for ( int i = 0; i < Edge[x].size(); i ++ ) { int j = Edge[x][i]; if ( ! dfn[j] ) { tarjan ( j ); low[x] = min ( low[x], low[j] ); } else if (instack[j]) low[x] = min ( low[x], dfn[j] ); } if ( dfn[x] == low[x] ) { cnt++; int tmp; do { tmp = s.top(); s.pop(); instack[tmp] = false; } while ( x != tmp ); } } int main() { while ( scanf ( "%d%d" , &V, &E ) && ( V || E ) ) { for ( int i = 0; i < V; i ++ ) Edge[i].clear(); for ( int i = 0; i < E; i ++ ) { int u, v; scanf ( "%d%d", &u, &v); Edge[u - 1].push_back(v - 1); } memset ( dfn, 0, sizeof ( dfn ) ); memset ( instack, false, sizeof ( instack ) ); din = 0; cnt = 0; for ( int i = 0; i < V; i ++ ) { if ( ! dfn[i] ) tarjan ( i ); } if ( cnt == 1 ) printf ( "Yes\n" ); else printf ( "No\n" ); } return 0; }
相关文章推荐
- HDOJ 1269 迷宫城堡-(强连通分量)
- hdoj1269迷宫城堡【scc】
- HDOJ1269(迷宫城堡)
- [HDOJ1269]迷宫城堡(有向图强连通分量)
- HDOJ--1269--迷宫城堡
- hdoj 1269 迷宫城堡 【有向图SCC 入门题目】
- HDOJ 1269 迷宫城堡 tarjan算法
- HDOJ 题目1269迷宫城堡(并查集)
- HDOJ-1269-迷宫城堡 解题报告
- hdoj1269-迷宫城堡(tarjan)
- 迷宫城堡--HDOJ 1269
- hdoj 1269-迷宫城堡解题报告
- [置顶] HDOJ 1269 迷宫城堡 (Tarjan + 强连通分量)
- 【强连通分量】 HDOJ 1269 迷宫城堡
- HDOJ-1269 迷宫城堡
- hdoj 1269 迷宫城堡【scc基础题目】
- hdoj1269迷宫城堡(强连通分量入门题)
- 迷宫城堡--HDOJ 1269(Tarjan)
- HDOJ---1269 迷宫城堡[强连通分量]
- HDOJ 1269 迷宫城堡