【关节点+桥】关节点和桥模板 Tarjan
来源:互联网 发布:网络小精灵日语版 编辑:程序博客网 时间:2024/05/01 18:21
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5, M = 1e5;struct Edge { int v, next, idx; Edge(){} Edge(int _v, int _next, int _idx): v(_v), next(_next), idx(_idx){}}e[M];int dfn[N], deep, head[N], tot;bool iscut[N], isbri[M];void __init__(){ tot = deep = 0; memset(head, -1, sizeof(head)); memset(dfn, 0, sizeof(dfn)); memset(iscut, 0, sizeof(iscut)); memset(isbri, 0, sizeof(isbri));}void add(int u, int v, int idx){ e[tot] = Edge(v, head[u], idx); head[u] = tot++;}//lowi:i及其子孙通过回边所能走到的最早的祖先的dfn值int dfs(int u, int fa){ int lowu = dfn[u] = ++deep;//打上时间戳,并初始化low值 int son = 0;//儿子数为0 for(int i = head[u]; ~i; i = e[i].next) { int v = e[i].v; if(!dfn[v]) {//下一个点指向儿子 son++; int lowv = dfs(v, u); lowu = min(lowu, lowv); if(lowv >= dfn[u]) iscut[u] = 1;//没有回边,是关节点 if(lowv > dfn[u]) isbri[e[i].idx] = true; } else if(dfn[v] < dfn[u] && v != fa)//指向爷爷,发现回边 lowu = min(lowu, dfn[v]);//利用回边来更新low值 } if(fa == -1 && son == 1) iscut[u] = 0;//只有1个儿子的根结点不是割顶 return lowu;}int main(){ __init__(); return 0;}
1 0
- 【关节点+桥】关节点和桥模板 Tarjan
- 关节点
- poj 1523 SPF(模板题)(Tarjan 关节点的朴素算法)
- poj 1144 Network(模板题)(Tarjan 关节点的朴素算法)
- POJ 1523-SPF(Tarjan算法-关节点)
- 关节点和重连通分量
- c2java 第7篇 图的连通分量,关节点和桥
- Tarjan 求无向图中的 关节点,和重连通分量
- 关节点算法
- 关节点算法
- poj1523 SPF 无向连通图 求割点 关节点 tarjan算法
- 图之关节点和重连通分量
- poj(1523)关节点
- 强连通分量 关节点
- 关节点(atriculation point)算法
- Poj 1523 SPF 关节点
- poj 1144 Network 关节点
- 关节点(割点)
- Android Api Component---翻译Fragment组件(二)
- mysql入门详解
- 无聊的扯淡,关于大学
- 新手如何开始学习SEO
- SEO优化一般有哪些步骤?
- 【关节点+桥】关节点和桥模板 Tarjan
- linux进程调度
- Linux编程-标准IO(4)-临时文件
- 利用gethostname获取主机名
- 矩形网格中寻找最长递增序列
- 参数估计--置信区间计算
- cadence中元件所在库
- admob更新, 新版本需要替换AdUnitId这个key, 其他貌似不变
- GCC, the GNU Compiler Collection