news 2026/4/16 17:28:48

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/4/15 11:35:19

BGP的跨区域连接和同区域连接

目前为R1与R2、R3建立邻居关系AS200内部的邻居关系建立下面是相关配置R1ip route-static 2.2.2.0 255.255.255.0 1.1.1.2&#xff08;R1与R3建立连接需要静态路由&#xff09;R2R3R4同一个区域内需要做OSPF才能相互建立区域

作者头像 李华
网站建设 2026/4/16 10:13:17

单臂路由的实现

实验使用设备&#xff1a;一台AR2220路由器&#xff0c;一台S3700交换机&#xff0c;两台PC机第一步配置PC1和PC2&#xff0c;PC1&#xff1a;IP192.168.10.1 24位掩码&#xff0c;网关&#xff1a;192.168.10.254PC2&#xff1a;IP&#xff1a;192.168.20.1 24位掩码 网关…

作者头像 李华
网站建设 2026/4/15 14:35:12

TikTok运营能否带动B2B外贸?易营宝客户案例与效果分析

本文以易营宝客户案例&#xff0c;分析TikTok运营对B2B外贸、多语言SEO与外贸网站建设的带动与转化效果。文章面向信息调研者、采购人员、企业决策者、项目管理者及经销商等角色&#xff0c;围绕外贸获客链路、流量成本、线索质量与合规风险给出可执行洞见。通过案例数据、行业…

作者头像 李华
网站建设 2026/4/16 10:13:40

MindSpore开发之路(三):搭建开发环境

1. 基础环境评估&#xff1a;我的电脑能跑MindSpore吗&#xff1f; 在安装任何软件之前&#xff0c;了解其对“居住环境”的要求至关重要。MindSpore对硬件和操作系统有一定的要求&#xff0c;但门槛并不高&#xff0c;对初学者非常友好。 1.1 硬件需求 CPU: MindSpore对CPU…

作者头像 李华
网站建设 2026/4/16 10:17:36

大模型微调完全指南:从理论到LLaMA Factory实战,小白也能轻松掌握!

简介 本文详细介绍了大模型微调的概念、方法和实践流程。首先解释了微调相比完整训练的成本优势&#xff0c;然后介绍了微调的基本步骤。重点讲解了使用LLaMA Factory进行微调的完整过程&#xff0c;包括数据准备、格式转换和图形界面操作。最后说明了如何在Ollama中部署微调后…

作者头像 李华
网站建设 2026/4/16 12:05:55

内存的艺术:Ascend C算子开发中的高效内存管理与优化策略

目录 &#x1f3af; 开篇摘要 一、 内存优化的认知升级&#xff1a;从功能正确到性能极致 1.1 为什么内存优化比计算优化更重要&#xff1f; 1.2 昇腾内存架构的硬件真相 二、 &#x1f3d7;️ 技术原理&#xff1a;内存优化的系统方法论 2.1 三段式流水线&#xff1a;As…

作者头像 李华