强连通分量SCC模版(LRJ)
2013-04-07 09:26
267 查看
#include<cstdio> #include<algorithm> #include<vector> #include<cstring> #include<stack> using namespace std; const int maxn = 1000 + 10; //图中节点编号从0开始,scc从1开始 vector<int> G[maxn]; int pre[maxn], lowlink[maxn], sccno[maxn], dfs_clock, scc_cnt; stack<int> S; void dfs(int u) { pre[u] = lowlink[u] = ++dfs_clock; S.push(u); for(int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if(!pre[v]) { dfs(v); lowlink[u] = min(lowlink[u], lowlink[v]); } else if(!sccno[v]) { lowlink[u] = min(lowlink[u], pre[v]); } } if(lowlink[u] == pre[u]) { scc_cnt++; for(;;) { int x = S.top(); S.pop(); sccno[x] = scc_cnt; if(x == u) break; } } } void find_scc(int n) { dfs_clock = scc_cnt = 0; memset(sccno, 0, sizeof(sccno)); memset(pre, 0, sizeof(pre)); for(int i = 0; i < n; i++) if(!pre[i]) dfs(i); }
相关文章推荐
- 强连通分量(SCC)模版
- 强连通分量(LRJ训练指南)
- 强连通分量scc
- poj 1236 scc强连通分量
- 强连通分量(SCC)Kosaraju算法学习笔记
- 强连通分量之Korasju 与tarjan两小模版题
- 求解有向图的强连通分量的SCC问题---POJ 2186 Popular Cows
- 【有向图强连通分量(SCC)】
- HDU 1269 迷宫城堡 (裸的Tarjan算法求强连通分量, 可作模版)
- 重连通分量模版
- 无向图点双连同分量BCC模版(LRJ)
- 强连通分量(LRJ训练指南)
- 强连通分量scc
- UVA 11324 有向图强连通分量缩点得SCC图,并在其上求最长路径
- 有向图连通分量SCC
- 强连通分量(SCC)的Tarjan算法
- 强连通分量SCC
- soj 3134: windy和水星 Stoer-Wagner算法求无向图的最小割集:一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集;最小割集当然就权和最小的割集
- 有向图的强连通分量[Tarjan算法] (c语言)
- 强连通分量的三种算法