hdu 1269 (强连通基础图)
来源:互联网 发布:mac excel 公式求值 编辑:程序博客网 时间:2024/05/22 13:34
//Tarjan算法模板题,求出强连通分量,如果是1,所有的房间两两相连
#include<stdio.h>#include<stack>using namespace std;int n,m,dfs[100001],low[100002],ins[100002];struct edge{ int ed; struct edge *next;}*p[100002];void add(int x,int y){ edge *q=new edge; q->ed=y; q->next=p[x]; p[x]=q;}int ans,idx;stack<int>Q;void Tarjan(int x){ int v; dfs[x]=low[x]=idx++; Q.push(x); ins[x]=1; for( edge *j=p[x];j;j=j->next) { if(dfs[j->ed]==-1) { Tarjan(j->ed); low[x]=low[x]>low[j->ed]?low[j->ed]:low[x]; } else if(ins[j->ed]==1) low[x]=low[x]>dfs[j->ed]?dfs[j->ed]:low[x]; } if(low[x]==dfs[x]) { while(1) { v=Q.top(); Q.pop(); ins[v]=0; if(v==x)break; } ans++; }}int main(){ int i,x,y; while(scanf("%d%d",&n,&m),m||n) { for(i=0;i<=n;i++) { p[i]=NULL; dfs[i]=-1; ins[i]=0; } for(i=0;i<m;i++) { scanf("%d%d",&x,&y); add(x,y); } if(n<=1) {printf("Yes\n");continue;} if(m==0) {printf("No\n");continue;} ans=0;idx=0; for(i=1;i<=n;i++) if(dfs[i]==-1) Tarjan(i); if(ans==1) printf("Yes\n"); else printf("No\n"); } return 0;}
- hdu 1269 (强连通基础图)
- hdu 1269 强连通
- hdu 1269 强连通图的判定
- hdu 1269 强连通图的判定
- hdu 1269 强连通分量
- HDU 1269 强连通分量
- hdu 1827 (强连通基础题)
- HDU 1269 迷宫城堡(强连通分量):强连通图判定
- HDU 1269 迷宫城堡 最大强连通图题解
- HDU 1269 迷宫城堡(强连通图的判定)
- HDU 1269 迷宫城堡 -- 强连通图判断
- HDU 1269 迷宫城堡 图的强连通
- HDU 迷宫城堡 1269 (强连通图判定)
- hdu 1269 迷宫城堡 判断图是否强连通
- 周赛 HDU 2767 1269 1872 强连通
- hdu 1269 迷宫城堡 强连通分量
- HDU 1269(tarjan求强连通)
- HDU 1269 迷宫城堡 强连通
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- ConcurrentHashMap原理分析
- 利用可变参数宏__VA_ARGS__打造属于自己的DEBUG宏
- C++ 引用和指针
- RubyMine
- hdu 1269 (强连通基础图)
- OLED驱动 (51单片机)
- win8系统下安装软件老是出现扩展属性不一致的错误??
- IKJEFT01用法之——Unload Table Data
- 黑马程序员 04 Java基础教学 - 04 - Java基础之数组
- 第二天,2013-04-10,就业班第一天
- android学习笔记---36_Activity生命周期
- 排序算法
- 裁剪字符串trim()自定义改进版 js代码