news 2026/6/28 9:13:16

Tarjan算法图论全家桶--点双联通分量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tarjan算法图论全家桶--点双联通分量

定义

在无向图G=(V,E)中,如果删除任意一个节点(及其关联的边)后,子图仍然连通,则称这个子图是点连通的。

点双连通分量(Vertex Biconnected Component, vDCC):图的极大点连通子图

重要性质

  1. 点双连通分量内部没有割点
  2. 不同的点双连通分量之间通过割点连接
  3. 一个割点可以属于多个点双连通分量
  4. 点双连通分量和割点一起可以构成块-割点树

Tarjan算法求点双连通分量

1. 算法核心思想

Tarjan算法基于深度优先搜索(DFS),是求割点算法的扩展。核心思想是:

  1. 在DFS过程中维护一个,存储当前搜索路径上的节点
  2. 当发现一个割点时,从栈中弹出节点直到当前节点的子节点
  3. 弹出的节点与割点一起构成一个点双连通分量
  4. 注意:割点不出栈,因为它可能属于多个分量

2. 算法流程

// 核心判断条件if(low[to]>=dfn[u]){// 发现割点u的一个vDCC++tot;// 新增一个点双连通分量intv;do{v=stk.top();stk.pop();Dcc[tot].push_back(v);}while(v!=to);// 弹出直到子节点toDcc[tot].push_back(u);// 割点u也加入分量}

模板

说明:void Run(int _n,vector<int> adj[])传入总点数nvector<int>[]邻接表adj,运行Tarjan求点双联通分量。vector<int> Dcc[N]Dcc[i]存了编号为i的vDcc内所有的点.

template<intN>structvDCC{intdfn[N],low[N];constvector<int>*adj;vector<int>stk,cut;vector<int>Dcc[N];//1~tot,Dcc[i],编号为i的vDcc内的点.inttot;//vDcc数量intn,clk,root;voiddfs(intu){dfn[u]=low[u]=++clk;stk.push_back(u);intcnt=0;for(intto:adj[u]){if(dfn[to]==0){dfs(to);low[u]=min(low[u],low[to]);if(low[to]>=dfn[u]){++cnt;++tot;intv;do{v=stk.back();stk.pop_back();Dcc[tot].emplace_back(v);}while(v!=to);Dcc[tot].emplace_back(u);}}elselow[u]=min(low[u],dfn[to]);}if((u!=root&&cnt>=1)||cnt>=2)cut[u]=true;if(cnt==0&&u==root)Dcc[++tot].pb(u);}voidRun(int_n,vector<int>adj[]){n=_n;this->adj=adj;clk=tot=0;fill(dfn,dfn+n+3,0);fill(low,low+n+3,0);stk.clear();cut.assign(n+3,false);for(inti=0;i<=n+3;++i)Dcc[i].clear();for(inti=1;i<=n;++i){if(dfn[i]==0){root=i;dfs(i);}}}};constintmaxn=2*1e5+20;vDCC<maxn>T;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 8:18:02

自动化安全监测新突破:新一代测斜仪技术升级与行业应用

在岩土工程、煤矿勘探、基坑边坡监测、地质灾害预警等领域&#xff0c;深层水平位移监测的自动化、高效化、低成本化已成为行业核心需求。传统测斜仪在长期应用中暴露出人工依赖、数据不连续、维护繁琐等痛点&#xff0c;难以满足现代工程对实时预警与长期稳定监测的要求。随着…

作者头像 李华
网站建设 2026/6/27 8:48:32

巴菲特的石油行业投资:能源领域的机遇

巴菲特的石油行业投资&#xff1a;能源领域的机遇关键词&#xff1a;巴菲特、石油行业投资、能源领域、机遇、投资策略摘要&#xff1a;本文深入探讨巴菲特在石油行业的投资行为&#xff0c;分析其背后的投资逻辑与策略。通过对石油行业的背景介绍&#xff0c;阐述其核心概念与…

作者头像 李华
网站建设 2026/6/27 19:56:23

linux常见命令

linux常见命令1、基础命令1.1 ls指令1.2 pwd指令1.3 cd指令1.4 时间相关的指令1.5 sort指令1.6 uniq指令1.7 which指令1.8 管道 |1.9 clear指令1.10 dpkg指令1.11 echo指令1.12 man指令1.13 cal指令2、Linux文件管理命令2.1 cat指令2.2 head指令2.3 tail指令2.4 more指令2.5 le…

作者头像 李华
网站建设 2026/6/25 16:17:18

地磅系统相关术语

地磅系统相关术语1、皮重 (Tare Weight)2、毛重 (Gross Weight)3、净重 (Net Weight)4、进磅皮重时间 (Tare In Time)5、出磅毛重时间 (Gross Out Time)6、完整业务流程示例7、具体数据示例8、管理意义与用途8.1 重量数据的用途8.2 时间数据的用途8.3 防作弊功能9、行业应用差异…

作者头像 李华
网站建设 2026/6/27 11:28:38

硅谷增长女神掀桌:这10个增长神话全是坑!90%公司都踩过

硅谷增长女神掀桌子&#xff1a;这10个“增长神话”&#xff0c;其实全是坑&#xff01;大家好&#xff0c;我是01。 最近我在听 Lenny’s Podcast 的时候&#xff0c;听到了一期让我直呼“好家伙”的内容。嘉宾是 Elena Verna&#xff0c;前 Amplitude、Miro、Dropbox 的增长负…

作者头像 李华
网站建设 2026/6/26 3:39:49

pythonstudy Day38

GPU训练及类的call方法 疏锦行 “剩余时长(ETA)”本身就很难和记录次数线性对应 多数训练脚本的 ETA 计算方式是类似&#xff1a; 用最近若干 step 的平均耗时&#xff08;滑动平均 / 指数平滑&#xff09; 或用从 epoch 开始到现在的平均 step 耗时 然后 ETA avg_step_t…

作者头像 李华