0x66 Tarjan算法与无向图连通性(1)
……是什么?
给定无向连通图G=(V,E)(不一定连通);
割点:若对于x∈V,从图中删去节点x以及所有与x关联的边后,G分裂成两个或两个以上不相连的子图,则称x为G的割点。
桥(割边):若对于e∈E,从图中删去边e之后,G分裂成两个不相连的子图,则称e为G的桥或割边。
(如果图不连通,“割点”和“桥”就是它的各个连通块的“割点”和“桥”)。
时间戳:在图的深度优先遍历过程中,按照每个节点第一次被访问的时间顺序,以此给予N个节点1~N的整数标记,该标记就被称为“时间戳”,记为dfn[x]。
搜索树:在无向联通图中任选一个节点出发进行深度优先遍历,每个点只访问一次。所有发生递归的边(x,y)构成一棵树,我们把它成为“无向联通图的搜索树”。
(严谨的,从x到y是对y的第一次访问)
搜索森林:无向图的各个连通块的搜索树构成无向图的“搜索森林”。
追溯值: 设subtree(x)表示搜索树中以x为根的子树,“追溯值”low[x]定义为以下节点的时间戳的最小值:
1.subtree(x)中的节点。
2.通过1条不在搜索树上的边,能够到达subtree(x)的节点。
割边判定法则:无向边(x,y)是桥,当且仅当搜索树上存在x的一个子节点y,满足:
dfn[x]<low[y];
割点判定法则:若x不是搜索树的根节点(深度优先遍历的起点),则x是割点当且仅当搜索树上存在x的一个子节点y,满足:
dfn[x]<=low[y];
……为什么?
割边判定法则:根据定义,dfn[x]<low[y]说明从subtree(y)出发,在不经过(x,y)的前提下,不管走哪条边,都无法到达x或比x更早访问的节点。若把(x,y)删除,则subtree(y)就好像形成了一个封闭的环境,与节点x没有边相连,图断开成了两部分,因此(x,y)是割边。反之,若不存在这样的子节点y,使得dfn[x]<low[y],则说明每个subtree(y)都能绕行其他边到达x或比x更早访问的节点,(x,y)自然就不是割边。
割点判定法则与之类似。
……怎么做?
追溯值:为了计算low[x],应该先令low[x]=dfn[x],然后考虑从x出发的每条边(x,y):
若在搜索树上x是y的父节点,则令low[x]=min(low[x],low[y]);
若无向边(x,y)不是搜索树上的边,则令low[x]=min(low[x],dfn[y]).
以上所有内容均来自于《算法竞赛进阶指南》
0x66 Tarjan算法与无向图连通性(1)的更多相关文章
- 0x66 Tarjan算法与无向图联通性
bzoj1123: [POI2008]BLO poj3694 先e-DCC缩点,此时图就变成了树,树上每一条边都是桥.对于添加边的操作,相当于和树上一条路径构环,导致该路径上所有边都不成为桥.那么找这 ...
- [Tarjan系列] Tarjan算法求无向图的双连通分量
这篇介绍如何用Tarjan算法求Double Connected Component,即双连通分量. 双联通分量包括点双连通分量v-DCC和边连通分量e-DCC. 若一张无向连通图不存在割点,则称它为 ...
- tarjan算法求无向图的桥、边双连通分量并缩点
// tarjan算法求无向图的桥.边双连通分量并缩点 #include<iostream> #include<cstdio> #include<cstring> ...
- tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)
基本概念 给定无向连通图G = (V, E)割点:对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点割边(桥)若对于e∈E,从图中删去边e之后,G分 ...
- tarjan算法--求无向图的割点和桥
一.基本概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 2.割点:无向连通图中 ...
- tarjan算法--求解无向图的割点和桥
1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥 也就是说 无向连通图中,如果删除某边后,图变成不连通,则称该边为桥 2.割点:无向连通图中,如 ...
- Light OJ - 1026 - Critical Links(图论-Tarjan算法求无向图的桥数) - 带详细注释
原题链接 无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 也可以先用Tajan()进行dfs算出所有点 的low和dfn值,并记录dfs过程中每个 点的父节点:然后再把所有点遍历一遍 ...
- [Tarjan系列] Tarjan算法求无向图的桥和割点
RobertTarjan真的是一个传说级的大人物. 他发明的LCT,SplayTree这些数据结构真的给我带来了诸多便利,各种动态图论题都可以用LCT解决. 而且,Tarjan并不只发明了LCT,他对 ...
- SPF Tarjan算法求无向图割点(关节点)入门题
SPF 题目抽象,给出一个连通图的一些边,求关节点.以及每个关节点分出的连通分量的个数 邻接矩阵只要16ms,而邻接表却要32ms, 花费了大量的时间在加边上. // time 16ms 1 ...
随机推荐
- WEB的数据交互具体流程
前一段时间小小的总结了一下,web的前后交互的各种方式可能没写全,后期再写,话不多说 前端传递数据到servlet,servlet获取数据后操作DAO修改数据库,然后servlet将某些参数返回到前端 ...
- python之科学函数课——Numpy
一般来讲,数据都是由行列表示的,也就是矩阵,类似于Excel表格一样的东西. 首先我们学习一下Numpy,装好anaconda之后默认是装好的,下面是numpy的一些函数库:Numpy是科学计算库,是 ...
- Redis和Memchaed缓存数据查询
使用TreeNMS数据库管理工具 支持Redis和Memchaed并存同时管理维护,支持集群管理,减少运维成本,提高工作效率 自带环境,免安装.免布署,下载解压即可使用.适用于windows,Linu ...
- phpstorm界面不停的indexing,不停的闪烁
选择 File->Invalidate Caches / Restart...->Invalidate and Restart,就行了!
- fail-fast和fail-safe的区别
fail-fast(快速失败):多线程情况下,一个线程通过迭代器读取集合中的值时,另一个线程修改了集合,则会抛出ConcurrentModificationException异常: 集合中通过modC ...
- ISE初始化
step1:输入setup进行初始化,如下图: step2:输入setup进行初始化,如下图:
- jsp3
普通传值: a1.jsp <form action="a2.jsp" method="post"> 用户名:<input type=" ...
- odoo 数据库到期提醒
- 51-迷宫(一)- java版dfs和bfs
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数 nn ...
- 设计模式之装饰者模式-java实例
设计模式之装饰者模式 需求场景 我们有了别人提供的产品,但是别人提供的产品对我们来说还不够完善,我们需要对这个产品的功能进行补强,此时可以考虑使用装饰者模式. 我们已经有了产品,而且这个产品的功能非常 ...