【图论】边/点双联通分量

本文探讨图论中的边双联通分量和点双联通分量概念。边双联通分量指即使去掉某条边,分量仍保持连通,不存在桥。点双联通分量即使删除某个点,分量依然连通,无割点。通过hihocoder上的题目1184和1190进行理解和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:其实关于点双/边双。我觉得hihocoder那2个例子很生动吧。
对于边双就是即使该分量里断了一个边也并不影响连通性,即该分量里没有桥。一个点只能在一个边双分量之中。
对于点双就是该分量里即使断了一个点那还是联通的,即该分量里没有割点,一个点在点双可以在多个点双分量之中。
边双连通分量:hihocoder1184

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define eps 0.000000001
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7;
const int maxn=1e5+5;
int tot,head[maxn];
struct E{
   
	int to,next;
}edge[maxn<<1];
void add(int u,int v){
   
	edge[tot].to=v;
	edge[tot].next=head[u];
	head[u]=tot++;
}
int n,m;
int dfn[maxn],low[maxn],vis[maxn<<1],id[maxn],cnt,tott;
int ans[maxn];
stack<int> s;
void tarjan(int x){
   
	low[x]=dfn[x]=++tott;
	s.push(x);
	for(int i=head[x];i!=-1;i=edge[i].next){
   
		int v=edge[i].to;
		if(!vis[i]){
   
			vis[i]=vis[i^1]=1;
			if(!dfn[v]){
   
				tarjan(v);
				low[x]=min(low[x],low[v]);
			}
			else{
   
				low[x]</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值