*无向图求桥+边双连通分量——Tarjan
来源:互联网 发布:关口知宏 杭州 编辑:程序博客网 时间:2024/06/06 01:45
今天是2017/6/1,DCDCBigBig的第十八篇博文
桥
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;struct edge{ int u,v,next;}a[100001];int n,m,u,v,tot=0,tim=0,head[100001],dfn[100001],low[100001],ansu[100001],ansv[100001];void add(int u,int v){ a[++tot].u=u; a[tot].v=v; a[tot].next=head[u]; head[u]=tot;}void tarjan(int u,int fa){ int v; dfn[u]=low[u]=++tim; for(int tmp=head[u];tmp!=-1;tmp=a[tmp].next){ v=a[tmp].v; if(dfn[v]==0){ tarjan(v,u); low[u]=min(low[u],low[v]); if(low[v]>dfn[u]){ ansu[++ansu[0]]=u; ansv[++ansv[0]]=v; } }else{ if(dfn[v]<dfn[u]&&v!=fa){ low[u]=min(low[u],dfn[v]); } } }}int main(){ memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); ansu[0]=0; ansv[0]=0; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); add(u,v); add(v,u); } tarjan(1,-1); printf("--------\n"); for(int i=1;i<=ansv[0];i++){ printf("%d %d\n",ansu[i],ansv[i]); } return 0;}/*6 71 22 31 33 44 55 66 4--------3 4*/
中
阅读全文
0 0
- *无向图求桥+边双连通分量——Tarjan
- *无向图求割点+点双连通分量——Tarjan
- poj 3177 & 3352 【无向图双连通分量Tarjan】
- 无向图——双连通分量
- POJ 1515 浅谈无向图边双连通分量Tarjan求法
- 双连通分量-tarjan
- 双连通分量-tarjan
- 无向图的边双连通分量
- 求无向图的 边-双连通分量
- 无向图双连通分量
- poj3352[无向图双连通分量]
- 无向图双连通分量uva1108
- 无向图的双连通分量
- 【无向图的双连通分量】
- 无向图的双连通分量
- 无向图双连通分量
- 无向图的双连通分量
- 无向图的点双连通分量(tarjan模板)
- 新版本Xcode无法打包生成ipa的问题解决 Cannot generate iOS App archive in xcode
- 【Linux网络编程】基于TCP单进程版本阻塞式客户端/服务器
- 百练OJ 晶矿的个数(基础BFS)
- 获取文件目录结构
- 搭建 git 服务器
- *无向图求桥+边双连通分量——Tarjan
- Java还要再学一遍基础(三)hashCode方法
- JMS(Java消息服务)入门教程
- STL容器map的下标运算符[]
- $.ajax()方法详解
- 设计模式(Design Patterns)-可复用面向对象软件的基础 08:外观模式(Facade)
- java 堆 栈
- java存储数据
- ROS--TF学习--介绍