无向图的割点割边和双连通分量

无向图的割点和桥

在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。
如果某个割点集合只含有一个顶点X(也即 {X} 是一个割点集合),那么X称为一个割点。

设G是一个图,x是G的一条边,如果G-x的连通分支数大于G的连通分支数,则称x是G的一个桥,或割边。

双连通分量又分点双连通分量和边双连通分量两种。
若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图。一个无向图中的每一个极大点(边)双连通子图称作此无向图的点(边)双连通分量。
求双连通分量可用Tarjan算法。

点双连通分量和边双连通分量

若一个无向图中的去掉任意一个节点都不会改变此图的连通性,即不存在割点,则称作点双连通图。一个无向图中的每一个极大点双连通子图称作此无向图的点双连通分量
注意一个割点属于多个点双连通分量。

若一个无向图中的去掉任意一条边都不会改变此图的连通性,即不存在桥,则称作边双连通图。一个无向图中的每一个极大边双连通子图称作此无向图的边双连通分量
连接两个边双连通分量的边即是桥。
边双连通分量:可将其看做一棵树或者森林,节点为边双连通分量,树边为桥。

边双连通分量和点双连通分量的区别与联系

  1. 二者都是基于无向图
  2. 边双连通分量是删边后还连通,而后者是删点
  3. 点双连通分量一定是边双连通分量(除两点一线的特殊情况),反之不一定
  4. 点双连通分量可以有公共点,而边双连通分量不能有公共边

代码

Tarjan算法求无向图的割点

邻接表存图,输入为 n n n m m m 表示 n n n 个点 m m m 条边,接着输入 m m m 条边,输出第一行为割点的个数,然后一行为割点的编号。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cstring>

using namespace std;
const int N = 2e4 + 10;

int n, m, root;
vector<int> e[N];    //邻接表存图
int num[N], low[N], idx;
bool flag[N];

void dfs(int cur, int father) {
   
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值