当前位置: 首页 > news >正文

【笔记】双连通分量

双连通分量

割边:无向图中,删除这条边会使图不连通的边(又叫桥)。

割点:无向图中,删除这个点会使图不连通的点。

边双连通:两点 \(u,v\) 间不存在割边,就称 \(u,v\) 边双连通。即:删去 \(u,v\) 间任意一边,\(u,v\) 仍然连通。

点双连通:两点 \(u,v\) 间不存在割点,就称 \(u,v\) 点双连通。即:删去 \(u,v\) 间任意一点,\(u,v\) 仍然连通。

边双连通分量(eDCC):无向图中的极大边双连通子图。

点双连通分量(vDCC):无向图中的极大点双连通子图。

Tarjan

无向图割边割点、双连通分量均可以使用 Tarjan 算法高效求解。

求割边

对于一条边 \((u,v)\),若 \(v\) 无法回溯到 \(u\) 及以前搜到的节点,则若删去 \((u,v)\)\(u\)\(v\) 就无法连通,因此 \((u,v)\) 是一条割边。

在 Tarjan 算法中,注意更新 \(low_u\) 时跳过反向边,然后判断 \(low_v>dfn_u\) 即可。

void tarjan(int u,int fa){low[u]=dfn[u]=++dfncnt;for(int i=h[u];i;i=e[i].nxt){int v=e[i].to;if(!dfn[v]){tarjan(v,i);if(low[v]>dfn[u]) ans[++idx].from=u,ans[idx].to=v;low[u]=min(low[u],low[v]);}else if((i^1)!=fa){//判断反向边。需要链式前向星 tot 从 2 开始low[u]=min(low[u],dfn[v]);}}return ;
}

求割点

同理,对于一点 \(u\),若其一子节点 \(v\) 不能回溯到 \(u\) 之前搜到的节点,则 \(u\) 是个割点。只需要把 \(low_v>dfn_u\) 改为 \(low_v\ge dfn_u\) 即可。

特例是 DFS 树的根节点,如果在 DFS 树上根只有一个儿子,那么删除根剩下的节点依然连通。当儿子数 \(\ge2\) 时,根才是割点。

但要注意 \(u\) 可能不止一个子节点满足以上条件,会多次算出 \(u\)

void tarjan(int u,int fa){low[u]=dfn[u]=++dfncnt;int cnt=0;for(int i=h[u];i;i=e[i].nxt){int v=e[i].to;if(!dfn[v]){tarjan(v,i);if(low[v]>=dfn[u]&&fa!=-1) vis[u]=1;low[u]=min(low[u],low[v]);cnt++;}else if((i^1)!=fa){//判断反向边。需要链式前向星 tot 从 2 开始low[u]=min(low[u],dfn[v]);}}if(fa==-1&&cnt>1) vis[u]=1;return ;
}

求 eDCC

对于一个无向图,由于我们已确定搜索开始的点,整张图的 DFS 搜索树就已经确定下来。此时删掉所有 DFS 搜索树上边的反向边,构造出一个有向图。显然,有向图的 SCC 等价于无向图的 eDCC。

并且,由于无向边相邻两点互相可达,图上便不存在(对于 DFS 树的)横叉边,因为两点若有边相连,两点均可成为对方的祖先,所以搜索时总是会先构成祖先关系。所以只存在返祖边,自然不用判断走到的已访问的点是否在栈中。

int dfn[N],low[N],dfncnt,st[N],top;
int dcc[N],dc;//结点 i 所在 eDCC 的编号,eDCC 计数
int sz[N];//eDCC i 的大小
void tarjan(int u,int fa) {low[u]=dfn[u]=++dfncnt,st[++top]=u;for(int i=h[u];i;i=e[i].nxt) {int v=e[i].to;if(!dfn[v]){tarjan(v,i);low[u]=min(low[u],low[v]);}else if((i^1)!=fa){//判断反向边。需要链式前向星 tot 从 2 开始low[u]=min(low[u],dfn[v]);}}if(dfn[u]==low[u]) {dc++;while(st[top]!=u) {dcc[st[top]]=dc;sz[dc]++;top--;}dcc[st[top]]=dc;sz[dc]++;top--;}
}

vDCC

http://www.jsqmd.com/news/418046/

相关文章:

  • 2026年比表面积仪厂家核心技术及应用场景解析 - 品牌排行榜
  • Visual Paradigm 推出 AI 驱动的 UML 风格图:让领域建模更高效
  • 2026年绝缘片厂家实力推荐榜:PC/PET/PP/电机/LED/阻燃/防火/背胶/FORMEX/麦拉绝缘片,专业定制与高可靠性解析 - 品牌企业推荐师(官方)
  • 2026成都最新装修家装十大品牌排名及解析 - 十大品牌榜
  • 执业药师备考不踩坑!高性价比培训班推荐,在职考生必看 - 品牌测评鉴赏家
  • 执业药师备考不踩坑!5家高性价比培训机构测评,省钱又高效 - 品牌测评鉴赏家
  • 2026执业药师培训红黑榜!高口碑机构测评+避坑指南,备考党速藏 - 品牌测评鉴赏家
  • 安心养老怎么选?贵州养老院护理院老年公寓福利院实地参考 - 深度智识库
  • AI 搜索时代营销变革:GEO 生成式引擎优化成企业品牌增长新抓手 - 资讯焦点
  • 2026执业药师培训哪家强?5大口碑机构实测+避坑指南,备考党速藏! - 品牌测评鉴赏家
  • 核心数据链路设计
  • 零基础冲刺执业药师 高效备考的靠谱培训指南 - 品牌测评鉴赏家
  • 2026工业电气配套三大趋势:正品、技术、交付,代理商如何破局? - 资讯焦点
  • 2026欧洲10天自由行终极攻略:经典行程规划与全链路购票指南 - 资讯焦点
  • 类器官构建服务商口碑与信誉深度评测 - 品牌推荐大师1
  • 收藏必备:深度解析Transformer多头注意力机制,让LLM不再神秘
  • 2026淡纹眼膜亲身实测!这8款淡纹去黑眼圈值得入 - 资讯焦点
  • 收藏必备!Agent Tools全栈开发指南,解决碎片化、复杂化、黑盒化痛点
  • 基于深度学习的风力涡轮机检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 大模型落地新思路:Agent与Workflow构建智能业务系统
  • 类器官构建哪家技术强?核心技术对比分析 - 品牌推荐大师1
  • 2026 年云南靠谱旅行社六大品牌排名及解析 - 十大品牌榜
  • 拒绝踩坑!政企数字化转型如何优选数字孪生服务商?附TOP5推荐 - 深度智识库
  • 江苏省就业率高、口碑好的专科学校有哪些?整体就业率、专业对口率与校企合作深度对比(附避坑指南) - 资讯焦点
  • 告别熬夜做PPT!8个宝藏模板网站,一键套用直接封神 - 品牌测评鉴赏家
  • 2026年值得关注的夹持式超声波流量品牌推荐 - 品牌2025
  • Skills 与知识系统:让 AI 具备领域专业能力
  • 2026年 工业破乳剂厂家推荐排行榜:高效破乳剂、污水破乳剂、切削液破乳剂、油水分离剂,专业污水处理解决方案供应商精选 - 品牌企业推荐师(官方)
  • 2026卫生高级职称考试刷什么题?过来人经验推荐,选对题源高效备考 - 医考机构品牌测评专家
  • NMN哪个国家的好?2026国际NMN品牌排名及技术指标对比测评 - 资讯焦点