【HDU1269】迷宫城堡
2017-07-15 15:54
225 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269
Tarjan模板
我的模板库
Tarjan模板
我的模板库
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; #define Maxn 10010 #define Maxe 100010 struct Edge { int v,nxt; }e[Maxe]; int head[Maxn],stack[Maxn],dfn[Maxn],low[Maxn],belong[Maxn]; bool instack[Maxn]; int n,m,cnt,scnt,top,ecnt,tot; void init() { cnt=scnt=top=ecnt=0; memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); } void add_edge(int u,int v) { e[++ecnt].nxt=head[u]; e[ecnt].v=v; head[u]=ecnt; } void tarjan(int u) { int v,t; dfn[u]=low[u]=++tot; instack[u]=1; stack[++top]=u; for(int i=head[u];i!=-1;i=e[i].nxt) { v=e[i].v; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(instack[v]) low[u]=min(dfn[v],low[u]); } if(dfn[u]==low[u]) { scnt++; < 4000 span class="hljs-keyword">do { t=stack[top--]; instack[t]=0; belong[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=1,u,v;i<=m;i++) { scanf("%d%d",&u,&v); add_edge(u,v); } solve(); if(scnt == 1) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- [HDU1269]迷宫城堡(Tarjan)
- HDU1269:迷宫城堡(强连通)
- HDU1269:迷宫城堡【强连通】
- HDU1269 迷宫城堡(强连通分量tarjan入门题)
- 【HDU1269】迷宫城堡(tarjan)
- hdu1269 迷宫城堡(强连通图)
- 【模板】【hdu1269】迷宫城堡——tarjan
- HDU1269 迷宫城堡
- HDU1269 迷宫城堡
- hdu1269 迷宫城堡 (强连通模板)(有向图)
- [HDU1269]迷宫城堡(Tarjan求强连通分量)
- HDU1269 迷宫城堡 有向图强连通分量Tarjan算法
- [hdu1269]迷宫城堡(SCC)
- HDU1269 迷宫城堡(tarjan判断强连通)
- hdu1269 迷宫城堡 (模板)
- 强连通图之HDU1269 迷宫城堡
- HDU1269 迷宫城堡(裸强连通分量)
- [HDU1269]迷宫城堡 做题笔记
- hdu1269 迷宫城堡
- 迷宫城堡(hdu1269,强连通分量)