hdu 1269 迷宫城堡 Tarjan算法
来源:互联网 发布:百分百邮件营销软件 编辑:程序博客网 时间:2024/05/23 07:24
题目链接
题意:给出n个节点和m条边,判断这张图是不是强连通图。
第一次学习Tarjan算法,以下是Tarjan算法模板。
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#define N 11000#define M 110000using namespace std;struct node{ int next,v;}e[M];int head[N],dfn[N],low[N],v[N],q[N],cnt,scnt,top,n,m,blong[N];void init(){ memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); cnt=top=scnt=0;}void add_edge(int u,int v){ e[cnt].v=v; e[cnt].next=head[u]; head[u]=cnt++;}void tarjan(int u){ int t; dfn[u]=low[u]=cnt++; v[u]=1; q[top++]=u; for(int i=head[u];i!=-1;i=e[i].next) { int c=e[i].v; if(!dfn[c]) { tarjan(c); low[u]=min(low[u],low[c]); } else if(v[c]) low[u]=min(low[u],dfn[c]); } if(dfn[u]==low[u]) { scnt++; do { t=q[--top]; v[t]=0; blong[t]=scnt; }while(t!=u); }}void solve(){ for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);}int main(){ while(~scanf("%d%d",&n,&m)&&(n||m)) { init(); for(int i=0;i<m;i++) { int u,v; scanf("%d%d",&u,&v); add_edge(u,v); } solve(); cout<<(scnt==1?"Yes":"No")<<endl; }}
0 0
- hdu 1269 迷宫城堡 (tarjan算法)
- hdu 1269 迷宫城堡 Tarjan算法
- hdu 1269 迷宫城堡(tarjan 算法)
- 【HDU 1269】迷宫城堡 (Tarjan算法)
- HDU 1269 迷宫城堡 (Tarjan 算法)
- hdu-1269-迷宫城堡-Tarjan算法-java
- hdu 1269 迷宫城堡(Tarjan算法)
- HDU 1269 迷宫城堡 (强联通分量,Tarjan算法)
- hdu 1269 迷宫城堡(强连通分量 Tarjan算法)
- hdu 1269 迷宫城堡(tarjan模版)
- 【tarjan模板】HDU 1269 迷宫城堡
- HDU 1269 迷宫城堡(Tarjan)
- 迷宫城堡 - HDU 1269 Tarjan 模板题
- HDU 1269 迷宫城堡 (tarjan scc)
- hdu 1269 迷宫城堡【强连通Tarjan】
- hdu 1269 迷宫城堡 tarjan模板
- HDOJ 1269 迷宫城堡 tarjan算法
- HDU OJ 1269 迷宫城堡【有向图强连通分量的Tarjan算法 入门】
- HDU 1102 Constructing Roads(Kruskal)
- HDU4177 Avoiding a disaster
- Select Distinct
- bzoj 3738: [Ontak2013]Kapitał 数论
- linux
- hdu 1269 迷宫城堡 Tarjan算法
- CSS display 属性
- sqlite、mysql和postgresql对比
- linux命令大全
- 内部类详解
- Ubuntu14.04+Texlive2014+LYX-Linux下LYX的中文配置方案
- Android线程池
- 蛇形填数
- 常用正则表达式 备忘