HDU - 1269 - 迷宫城堡 (tarjan求强连通分量)
2015-08-04 10:47
288 查看
题目传送:迷宫城堡
思路:就是tarjan啦,不过korasaju肯定也行啦,这里注意可能本身就不是连通图
AC代码:
思路:就是tarjan啦,不过korasaju肯定也行啦,这里注意可能本身就不是连通图
AC代码:
[code]#include <map> #include <set> #include <cmath> #include <deque> #include <queue> #include <stack> #include <cstdio> #include <cctype> #include <string> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define INF 0x7fffffff using namespace std; const int maxn = 10005; int n, m; vector<int> mp[maxn]; int dfn[maxn]; int low[maxn]; int index; int cnt;//统计连通分量个数 int sum; int vis[maxn]; stack<int> s; bool in_stack[maxn]; void tarjan(int u) { dfn[u] = low[u] = ++index; // 为节点u设定次序编号和Low初值 s.push(u); // 将节点u压入栈中 sum ++; vis[u] = 1; in_stack[u] = true; int d = mp[u].size(); for(int i = 0; i < d; i ++) { // 枚举每一条边 int v = mp[u][i]; if(!vis[v]) { // 如果节点v未被访问过 tarjan(v); // 继续向下找 low[u] = min(low[u], low[v]); //更新 } else if(in_stack[v]) { // 如果节点v还在栈内 low[u] = min(low[u], dfn[v]); } } if(dfn[u] == low[u]) { // 如果节点u是强连通分量的根 int v; do { v = s.top(); // 将v退栈,为该强连通分量中一个顶点 s.pop(); in_stack[v] = false; } while(u != v); cnt ++; } } int main() { while(scanf("%d %d", &n, &m) != EOF) { if(n == 0 && m == 0) break; for(int i = 0; i <= n; i ++) { mp[i].clear(); } int u, v; for(int i = 0; i < m; i ++) { scanf("%d %d", &u, &v); mp[u].push_back(v); } memset(in_stack, false, sizeof(in_stack)); memset(vis, 0, sizeof(vis)); while(!s.empty()) s.pop(); cnt = 0;//统计强连通分量个数 index = 0; sum = 0;//居然可以是非连通图。。好吧。。连WA78次。。这个用来统计一个连通分量里的节点个数 tarjan(1); if(cnt == 1 && sum == n) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- My C# Study Notes
- hdu(杭电)ACM 1232 畅通工程
- 如何把浏览器上显示的页面数据 转换成 java字符串---java.net.URL
- 2015暑假学习任务报告 第二周
- 直接在线预览Word、Excel、TXT文件之ASP.NET
- Eclipse+jdk环境搭建
- 改写tomcat重启脚本
- 3D建模基础教程
- 南邮 OJ 1086 A + B Problem (3)
- 水池数目
- EMMA 覆盖率工具
- Android 基础控件之ImageSwitcher、Gallery功能的实现
- MFC修改视图CView的背景颜色
- UIDatePicker 日期/时间选取器(滚轮)—IOS开发
- sip协议内容解析
- MonkeyRunner简介
- 重装系统时忘记拔U盘或移动硬盘导致磁盘盘符错位
- eclipse保存内容,弹出svn错误框:updating change sets for svnStatusSubscriber
- Kettle环境的安装
- 软件测试之测试用例设计题