POJ2186 Tarjan强连通分量+缩点
来源:互联网 发布:打卡网络用语什么意思 编辑:程序博客网 时间:2024/05/01 00:52
这道题基于Tarjan的求强连通分量,然后缩点
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <stack>using namespace std;struct EDGE{ int v; int next;}edge[55555];int head[11111],low[11111],dfn[11111],id[11111],out[11111],ans[11111];int e,depth,cnt,n,m;stack <int> q;void addedge(int u,int v){ edge[e].v = v; edge[e].next = head[u]; head[u] = e++;}void dfs(int x){ low[x] = dfn[x] = ++depth; q.push(x); for(int i = head[x] ; i != -1 ; i = edge[i].next){ int v = edge[i].v; if(!dfn[v]){ dfs(v); low[x] = min(low[v],low[x]); } else if(!id[v]){ low[x] = min(dfn[v],low[x]); } } if(low[x] == dfn[x]){ cnt++; int temp = 0; int v; do{ temp++; v = q.top(); q.pop(); id[v] = cnt; }while(v != x); ans[cnt] = temp; } return ;}void Tarjan(){ cnt = depth = 0; while(!q.empty()){ q.pop(); } memset(dfn,0,sizeof(dfn)); for(int i = 1 ; i <= n ; i ++){ if(!dfn[i]) dfs(i); } return ;}void init(){ e = 0; memset(id,0,sizeof(id)); memset(head,-1,sizeof(head)); memset(out,0,sizeof(out));}int main(){ while(scanf("%d%d",&n,&m) != EOF){ init(); for(int i = 0 ; i < m ; i ++){ int a,b; scanf("%d%d",&a,&b); addedge(a,b); } Tarjan(); if(cnt == 1){ printf("%d\n",n); continue; } for(int i = 1 ; i <= n ; i ++){ for(int j = head[i] ; j != -1 ; j = edge[j].next){ int v = edge[j].v; if(id[i] != id[v]){ out[id[i]]++; } } } int res = 0; for(int i = 1 ; i <= cnt ; i ++){ if(!out[i]){ if(!res){ res = ans[i]; } else { res = 0; break; } } } printf("%d\n",res); } return 0;}
- POJ2186 Tarjan强连通分量+缩点
- poj2186 强连通分量+缩点
- POJ2186 Popular Cows【Tarjan】【强连通分量】
- poj2186 Popular Cows(强连通分量tarjan)
- Tarjan求强连通分量 缩点
- tarjan强连通分量缩点笔记
- poj2186 Popular Cows--Kosaraju算法 & 缩点 & 强连通分量
- poj2186强连通分量
- 强连通分量+poj2186
- POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】
- poj2186 Popular Cows(强连通分量)(korasaju||tarjan模板题)
- POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】
- POJ2186(tarjan求连通分量)
- poj 2553 (tarjan求强连通分量+缩点)
- 强连通分量及缩点tarjan算法解析
- NYOJ-120校园网络【强连通分量缩点&&tarjan】
- POJ 2762 强连通分量 Tarjan + 缩点
- [HDU2767]Proving Equivalences(Tarjan缩点+强连通分量)
- vb.net---算术运算的先后顺序
- Java之美[从菜鸟到高手演变]之Java学习方法
- Matlab中ones()用法
- MFC控件学习篇
- unity基础开发----Unity3DuniSWF MovieClipBehaviour的使用
- POJ2186 Tarjan强连通分量+缩点
- 上海新增1例人感染H7N9禽流感 已死亡
- 用以获取网页源码并转码的方式。(新闻标题信息采集)
- Java, ProGuard, and Ant - How to obfuscate Java class files with ProGuard
- 获得位图之GBK
- Python en:First Steps--part one
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 沟通:用故事产生共鸣
- android 搭建NDK开发环境