在之前的博客中我们已经介绍了如何用Tarjan算法求有向图中的强连通分量,而今天我们要谈的Tarjan求桥、割点,也是和上篇有博客有类似之处的。

关于桥和割点:

桥:在一个有向图中,如果删去一条边,而后这个有向图不再联通,我们便称删去的这条边为有向图的桥。

割点:在一个有向图中,如果删去一个点,使这个有向图中剩下的点不在联通,我们便称这个点为有向图的割点。

Tarjan算法原理分析:

和上文一样的,我们求出一个dfn数组(进行dfs时遍历的顺序),和一个low数组(以u为根的子树中,能连到dfn值最小的节点)。

求桥:

对于一个条边u,v(u,v为边的两个端点),如果dfn[u]<=low[v],那么这条边就是桥。因为以v为根的子树中无法通过返祖边(返祖边的定义可以参考我之前的博客)来连到u的祖先,只能通过u,v这条边才能与u的祖先联通,那么也就意味着将着条边删去后,以v为根的子树将不再能与其他点联通,所以这条边就是桥。

求割点:

对于一个点u:

1、如果它是根,那么假如它只有一个儿子,那么它就不是割点,假如有多个儿子,那么它就是割点。

2、如果它不是根,那么假如dfn[u]<=low[v],它就是割点。因为删掉点u以后,v以及v的子树不能到达u的祖先。

特别注意:

在无向图中,不一定需要返祖边来更新low数组,横叉边也一样可以。

代码:

var
next,head,vet,a,dfn,low:array[1..200000]of longint;
ans,i,n,m,x,y,tot,time,root:longint;
function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end;
procedure add(x,y:longint);
begin
inc(tot);
next[tot]:=head[x];
vet[tot]:=y;
head[x]:=tot;
end;
procedure tarjan(u:longint);
var
i,v,cnt:longint;
begin //
inc(time); i:=head[u]; cnt:=0;
dfn[u]:=time; low[u]:=time;
while i<>0 do
begin
v:=vet[i];
if dfn[v]>0 then low[u]:=min(dfn[v],low[u]) else
begin
inc(cnt);
tarjan(v);
low[u]:=min(low[u],low[v]);
if ((u<>root)and(dfn[u]<=low[v])or(u=root)and(cnt>1))and(a[u]=0) then
begin
inc(ans); a[u]:=1;
end;
end;
i:=next[i];
end;
end;
begin
read(n,m);
for i:=1 to m do
begin
read(x,y);
add(x,y); add(y,x);
end;
for i:=1 to n do
begin
root:=i;
if dfn[i]=0 then tarjan(i);
end;
writeln(ans);
for i:=1 to n do
if a[i]=1 then write(i,' ');
writeln;
end.

[学习笔记] Tarjan算法求桥和割点的更多相关文章

  1. [学习笔记] Tarjan算法求强连通分量

    今天,我们要探讨的就是--Tarjan算法. Tarjan算法的主要作用便是求一张无向图中的强连通分量,并且用它缩点,把原本一个杂乱无章的有向图转化为一张DAG(有向无环图),以便解决之后的问题. 首 ...

  2. tarjan算法--求无向图的割点和桥

    一.基本概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 2.割点:无向连通图中 ...

  3. 学习笔记--Tarjan算法之割点与桥

    前言 图论中联通性相关问题往往会牵扯到无向图的割点与桥或是下一篇博客会讲的强连通分量,强有力的\(Tarjan\)算法能在\(O(n)\)的时间找到割点与桥 定义 若您是第一次了解\(Tarjan\) ...

  4. tarjan算法求桥双连通分量 POJ 3177 Redundant Paths

    POJ 3177 Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12598   Accept ...

  5. [Tarjan系列] Tarjan算法求无向图的双连通分量

    这篇介绍如何用Tarjan算法求Double Connected Component,即双连通分量. 双联通分量包括点双连通分量v-DCC和边连通分量e-DCC. 若一张无向连通图不存在割点,则称它为 ...

  6. Tarjan求强连通分量、求桥和割点模板

    Tarjan 求强连通分量模板.参考博客 #include<stdio.h> #include<stack> #include<algorithm> using n ...

  7. tarjan算法求无向图的桥、边双连通分量并缩点

    // tarjan算法求无向图的桥.边双连通分量并缩点 #include<iostream> #include<cstdio> #include<cstring> ...

  8. Tarjan算法求割点

    (声明:以下图片来源于网络) Tarjan算法求出割点个数 首先来了解什么是连通图 在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称 ...

  9. Tarjan算法求出强连通分量(包含若干个节点)

    [功能] Tarjan算法的用途之一是,求一个有向图G=(V,E)里极大强连通分量.强连通分量是指有向图G里顶点间能互相到达的子图.而如果一个强连通分量已经没有被其它强通分量完全包含的话,那么这个强连 ...

随机推荐

  1. Substance Painter教程

    https://huke88.com/route/substance-painter.html?sem=baidu&kw=106738

  2. [工作积累] shadowmap 改进

    前面几篇阴影相关的: https://www.cnblogs.com/crazii/p/5443534.html 这个是在做bh3 MMD角色自阴影时的笔记 https://www.cnblogs.c ...

  3. Beware of the encrypted VM

    A friend of mine Megan told me that she got an error message as below screenshot when trying to open ...

  4. 项目实战 - 原理讲解<-> Keras框架搭建Mtcnn人脸检测平台

    Mtcnn它是2016年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测.这三个级联的网络分别是快速生成 ...

  5. SQL用于更新ID为顺序ID(用于删除了几条数据导致id不连续)

    UPDATE tab1022zhm SET ID =FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) ROW,comName FROM dbo.tab1022z ...

  6. 【原创】Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...

  7. Playbook使用,编写YAML

    YAML是什么? YAML是一个可读性高.用来表达数据序列的格式语言 YAML:YAML Ain't a Markup Language YAML以数据为中心,重点描述数据的关系和结构 YAML的格式 ...

  8. 归并排序求逆序对(poj 2299)

    归并排序求逆序对 题目大意 给你多个序列,让你求出每个序列中逆序对的数量. 输入:每组数据以一个数 n 开头,以下n行,每行一个数字,代表这个序列: 输出:对于输出对应该组数据的逆序对的数量: 顺便在 ...

  9. Spring基于XML的IOC环境搭建及入门

    一.使用Maven构建Java项目 * 项目目录结构 1. 在sun.service包下创建UserDao接口和接口实现类: UserDao接口: package sun.service; /** * ...

  10. Linux实战(4):Centos7升级python

    记一笔升级python后产生的问题,并给予解决方案.莫慌看下文: 升级python3 我是直接 yum安装的,当然安装方法有很多,不喜欢此安装方式的可选用其他方式,我再此就不一一解释了.安装方式可不同 ...