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

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;
http://www.cnnetsun.cn/news/116221.html

相关文章:

  • Day 42 复习日
  • 大模型Memory模块深度解析:从基础实现到高级应用!
  • 53.自定义工作队列传参
  • 安全VR:靠谱的VR安全体验馆厂商品牌榜,技术实力与落地案例
  • 灵遁者:我对于探索的热爱,从来没有减少过
  • 右值引用和移动语义
  • 基于PLC的智能路灯控制系统的设计
  • N-乙酰神经氨酸——连接生命与健康的“智慧糖链”核心组分 CAS:131-48-6
  • ZooKeeper:enableACL和requireClientSASLAuth
  • 为什么K8s 1.24 的容器时间调整会影响宿主机的时间啊?
  • AI时代核心竞争力:手写多智能体系统,不依赖LangChain/LlamaIndex
  • WebSocket 对比 MQTT通信优势
  • 基于springboot面料花型试衣系统
  • 域名被污染是什么意思?还能不能继续使用?
  • Python大数据基于深度学习的音乐推荐系统-250326--论文
  • Python大数据影评情感分析可视化及推荐系统的设计与实现_u5ck1y17_论文
  • AI Agent设计模式大揭秘:9种架构让你从编程小白变身架构师!
  • Python大数据基于Spark的南昌房价数据分析系统的设计与实现_45i0b357_论文
  • 9 个降AI率工具,自考人必备的降重神器!
  • 9 个降AI率工具,自考人必备!
  • 旅行记录应用新建旅行 - Cordova OpenHarmony 混合开发实战
  • 9 个降AI率工具推荐,继续教育学生必备
  • Java八股文(Java基础面试题)
  • 邦芒忠告:职场中没有好人缘的10种人
  • 基于Spring Boot人才招聘管理系统
  • 拒绝“魔法值”注入:手把手教你实现 Spring Boot 高性能枚举校验注解 @InEnum
  • 国内容易上手的claudecode一键配置指南
  • 复原IP地址
  • Redis 发布订阅
  • JQuery支持WebUploader完成百万文件断点续传的原理?