【双连通】双连通模板 Tarjan
来源:互联网 发布:北京关键词优化 编辑:程序博客网 时间:2024/04/28 18:51
比起求无向图关节点的算法,只是多了一个栈,用来储存不存在关节点的所有边,遇到关节点之后弹出所有边进行储存
#include <cstdio>#include <cstdlib>#include <cstring>#include <stack>#include <vector>#define Mem(f, x) memset(f, x, sizeof(f))#define PB push_backusing namespace std;const int N = 1e5, M = 1e5;struct Pair { int u, v; Pair(){} Pair(int _u, int _v): u(_u), v(_v){}};int dfn[N], iscut[N], bcc_id[N];stack <Pair> s;vector <int> bcc[N];int bcc_cnt, deep;int dfs(int u, int fa){ int lowu = dfn[u] = ++deep; int son = 0; for(int i = head[u]; ~i; i = e[i].next) { int v = e[i].v; Pair p = Pair(u, v); if(!dfn[v]) { s.push(p); son++; int lowv = dfs(v, u); lowu = min(lowu, lowv); if(lowv >= dfn[u]) { iscut[u] = 1; bcc_cnt++;//从1开始编号的 bcc[bcc_cnt].clear(); while(1) { Pair x = s.top(); s.pop(); if(bcc_id[x.u] != bcc_cnt) { bcc[bcc_cnt].PB(x.u); bcc_id[x.u] = bcc_cnt; } if(bcc_id[x.v] != bcc_cnt) { bcc[bcc_cnt].PB(x.v); bcc_id[x.v] = bcc_cnt; } if(x.u == u && x.v == v) break; }//弹出所有边进行储存,直到遇见了u->v } } else if(dfn[v] < dfn[u] && v != fa) { s.push(p); lowu = min(lowu, dfn[v]); } } if(fa == -1 && son == 1) iscut[u] = 0; return lowu;}void tarjan(int n){ for(int i = 0; i < n; i++) { dfn[i] = iscut[i] = bcc_id[i] = 0; } deep = bcc_cnt = 0; for(int i = 0; i < n; i++) {//为防止图不连通 if(!dfn[i]) dfs(i, -1); }}int main(){ return 0;}
2 0
- 【双连通】双连通模板 Tarjan
- 边双连通模板
- 【tarjan双连通+LCA求割边数】POJ 3694
- 我的 边双连通 模板
- 连通性Tarjan算法 双连通与强连通
- [POJ 3177]Redundant Paths[边双连通][Tarjan][缩点]
- POJ-3352 Road Construction,tarjan缩点求边双连通!
- 双连通分量-tarjan
- 双连通分量-tarjan
- 无向图的割点,割边,点双连通,边双连通模板
- hdu 4005(双连通)
- 强连通&&双连通
- hoj2360Redundant Paths双连通
- hdu 4005 双连通
- poj 3177 双连通
- poj 3352 双连通
- 边双连通模版
- 【图论】双连通总结
- [水题][第一阶段-输出输出][HDOJ-1091]A+B for Input-Output Practice (III)
- 【动态规划】电路布线问题
- new
- JAVA的静态变量、静态方法、静态类
- hive与hbase数据类型对应关系
- 【双连通】双连通模板 Tarjan
- JAVA中提高性能的办法
- hive存储处理器(StorageHandlers)以及hive与hbase整合
- 2013 CVPR点评
- 重装 iTunes 错误代码 42401 解决办法
- sdfsdf
- [水题][第一阶段-输出输出][HDOJ-1092]A+B for Input-Output Practice (IV)
- [水题][第一阶段-输出输出][HDOJ-1093]A+B for Input-Output Practice (V)
- sql Transact-SQL语句基础 实验