【HDU 1269】迷宫城堡
来源:互联网 发布:专业数据分析团队介绍 编辑:程序博客网 时间:2024/05/21 14:42
【HDU 1269】迷宫城堡
强联通模板 要求全图只有一个强联通分量 成立则Yes否则No
可能有一些独立的点 所以要从头到尾遍历 为此献了几个WA 节哀
代码如下
#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <stack>using namespace std;vector <int> head[11111];stack <int> s;int dfn[11111],low[11111];int vis[11111];int f,t,n,m;void Init(){ int i; for(i = 1; i <= n; ++i) head[i].clear(); t = f = 0; memset(vis,0,sizeof(vis)); while(!s.empty()) s.pop();}void Tarjan(int u){ dfn[u] = low[u] = t++; int i,v; s.push(u); vis[u] = -1; for(i = 0; i < head[u].size(); ++i) { v = head[u][i]; if(!vis[v]) { Tarjan(v); if(f == 2) return; low[u] = min(low[v],low[u]); } else if(vis[v] == -1) { low[u] = min(low[u],dfn[v]); } } if(dfn[u] == low[u]) { if(f) { f = 2; return; } f = 1; while(s.top() != u) { vis[s.top()] = 1; s.pop(); } vis[s.top()] = 1; s.pop(); }}int main(){ int i,u,v; while(~scanf("%d %d",&n,&m) && (m+n)) { Init(); for(i = 0; i < m; ++i) { scanf("%d %d",&u,&v); head[u].push_back(v); } for(i = 1; i <= n; ++i) if(!vis[i]) Tarjan(i); if(f == 1) 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 迷宫城堡
- hdu 1269 迷宫城堡
- hdu 1269 迷宫城堡
- 【HDU 1269】迷宫城堡
- hdu 1269 迷宫城堡
- hdu 1269 迷宫城堡
- hdu 1269 迷宫城堡
- DuiLib : 修改内嵌网页的安全选项
- redis 学习笔记(2)-client端示例代码
- Java并发编程基础构建模块(04)——线程阻塞与中断
- 6800与8080
- 顶部轮播图(自动循环滚动)
- 【HDU 1269】迷宫城堡
- linux 编译进内核 && 编译成模块module
- Servlet--ServletInputStream类,ServletOutputStream类
- Android如何自定义一个View(一)
- 图片压缩之PNG
- redis 学习笔记(3)-master/slave(主/从模式)
- 图像处理和图像识别中常用的OpenCV函数
- 更改git远程仓库
- 空域滤波与频域滤波