SCC之tarjan算法入门【HDU 1269】
来源:互联网 发布:知乎回答能删除吗 编辑:程序博客网 时间:2024/06/06 12:31
转载请注明出处:http://blog.csdn.net/a1dark
分析:题意很简单、就是问图的SCC是否为1、于是学习tarjan算法、判断图中SCC数量、
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=10001;struct node{ int e,next;}mpt[maxn*10];int head[maxn];int n,m,k;int low[maxn];int dfn[maxn];int vis[maxn];int que[maxn];int cnt,index,top;void add(int s,int t){ mpt[k].e=t; mpt[k].next=head[s]; head[s]=k++;}void tarjan(int s){ low[s]=dfn[s]=++index; que[++top]=s; vis[s]=1; for(int i=head[s];i!=-1;i=mpt[i].next){ int e=mpt[i].e; if(!dfn[e]){ tarjan(e); low[s]=min(low[s],low[e]); } else if(vis[e]){ low[s]=min(low[s],dfn[e]); } } if(low[s]==dfn[s]){ cnt++; int e; do{ e=que[top--]; vis[e]=0; }while(s!=e); }}void init(){ memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); memset(vis,0,sizeof(vis)); cnt=k=index=0; top=-1;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ if(n==0&&m==0)break; init(); int a,b; for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); add(a,b); } for(int i=1;i<=n;i++){ if(!dfn[i]) tarjan(i); } if(cnt==1)printf("Yes\n"); else printf("No\n"); } return 0;}
- SCC之tarjan算法入门【HDU 1269】
- HDU 1269 迷宫城堡 (tarjan scc)
- SCC Tarjan算法
- hdu 1296 迷宫城堡【有向图scc+Tarjan入门】
- hdu 6165 FFF at Valentine (Tarjan算法,scc+dp)
- SCC的Tarjan算法模板
- hdu 1269-tarjan算法
- HDU 2767 Proving Equivalences (tarjan scc)
- 强连通分量(SCC)的Tarjan算法
- Tarjan算法小结1——SCC
- Tarjan SCC
- hdu 1269 tarjan算法模板
- Tarjan算法求解强连通分量(SCC)
- tarjan(SCC)模板
- HDU OJ 1269 迷宫城堡【有向图强连通分量的Tarjan算法 入门】
- hdu 1269 迷宫城堡 (tarjan算法)
- HDU 1269 强连通模板 Tarjan算法
- hdu 1269 迷宫城堡 Tarjan算法
- 学习GTD
- wiki1245-最小的N个和
- wiki3223素数密度
- 抄书问题
- 汉诺塔
- SCC之tarjan算法入门【HDU 1269】
- 001 ffmpeg
- Nmap速查表v1.0
- 动态规划之矩阵链乘法
- wustoj 1260 RMQ with Shifts 线段树单点更新
- CodeForces#203(Div.2)- A,B,C
- 写在回家之前
- 对“自学”的一些认识
- 【Visual C++】游戏开发笔记专栏网址