双连通分量
来源:互联网 发布:地下城与勇士300k网络 编辑:程序博客网 时间:2024/04/30 04:23
双连通分量
无向图的双连通分量跟有向图的连通分量有点像。
先说说一些定义。
时间戳:以某个点
连通图:每两个点间都有路径存在的无向图就叫连通图。
割顶(cut vertex):也叫割点。在某个连通图
桥(bridge):类似的,在某个连通图
点-双连通:
若一个无向图的点两两间都有两条不相交(经过的点不一样)的路径,那么我们就称这个无向图是点-双连通的。条件等价于任意两条边都在一个简单环内。
不难发现,若一个无向图是点-双连通图,那么就代表这个图内部无割顶(既然有两条不相交的路径,去掉任何一个点都还是可以连通的)。
边-双连通:
类似的,若一个无向图的点两两间都有两条不重合(这个要求低一点,点可以重复,但边不行)的路径,那么我们就称这个无向图是边-双连通的。
在边-双连通图中,去掉任何一条边,这个图都还是连通的。
下面进入正题:
对于一张无向图,它的点-双连通的极大子图称为双连通分量(Biconnected Component,BCC)。
而边-双连通的极大子图称为边-双连通分量(edge-biconnected component)。
如上图:虽然{3,4,5}也是点-双连通的,但{3,4,5,6,7}才叫双连通分量,这就是极大子图的意义。另外一个双连通分量是{1,2,3}。还有,整个图{1,2,3,4,5,6,7,8}是边-双连通分量。
还如上图:对于整个图来说,3是割顶。不难发现作为割顶的点会同时存在于多个双连通分量里。而其他点只可能存在于一个双连通分量里。
找连通分量首先要会找割顶。
随便找一个点作为根,强行把无向图转换为一棵树。连回祖先的边我们叫它反向边(要与有向图的反向边区分开)。
不难发现:若某个点
用时间戳就可以知道祖孙关系。
若发现某个点的后代最多只能连回它自己,则说明这个点及它的后代就是一个双连通分量。
注意:用反向边更新时,不能用连回父亲的边,这条边没意义。
例题:UVaLive3523(这里题解)
- 双连通分量
- 双连通分量_road
- 边双连通分量
- 双连通分量
- 双连通分量-tarjan
- 双连通分量
- 双连通分量
- 双连通分量-tarjan
- 双连通分量
- poj3177 双连通分量
- 点双连通分量
- 双连通分量
- hdu3394Railway 双连通分量
- 点双连通分量
- 点双连通分量
- 双连通分量 模板
- 双连通分量
- 双连通分量
- linux centOS6 nexus 开启自动启动
- 电路布线问题的几种动态规划算法
- MXNet的模型园地
- VBox on 14.04: Kernel driver not installed (rc=-1908) [duplicate]
- vmware下centos配置本地yum源
- 双连通分量
- XBanner——支持图片无限轮播控件 类库
- 不再联系
- sql null
- 一个高仿今日头条的视频播放器
- 两栏布局左侧自适应
- 2016 第七届 蓝桥杯C语言B组预赛
- 如何直接读取QCamera的一帧数据
- 优酷播放器与layer弹出层(别的弹出层未测试)遮挡问题