news 2026/4/15 5:19:02

Tarjan全家桶系列--割点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tarjan全家桶系列--割点

割点定义

在无向图G=(V,E)中,如果一个节点u满足:删除u以及与u相关联的所有边后,图的连通分量数量增加,则称u为割点

核心思想

Tarjan算法仍然基于深度优先搜索(DFS),利用两个关键数组:

  • dfn[u]:节点u的DFS访问顺序(时间戳)
  • low[u]:从u出发,不经过DFS树中的父节点,能到达的最小dfn值

判断割点的条件

对于一个节点u,有两种情况是割点:

情况1:u不是DFS树的根节点

如果存在u的一个子节点v,满足low[v] >= dfn[u],那么u是割点。

解释:这意味着从v出发,在不经过u的情况下,无法到达u的祖先节点。移除u后,v及其后代将与图的其余部分断开。

情况2:u是DFS树的根节点

如果u有两个或更多个子树(在DFS树中),那么u是割点。

解释:作为根节点,每个子树之间没有连接(除了通过根节点)。移除根节点后,这些子树将互相断开。

模板

说明:Run(int _n,const vector<int>adj[])传入总点数nvector<int>[]邻接表,运行tarjan求割点
vector<bool> Get()获取cut[]数组,cut[i]==truei点是割点

template<intN>structCut_vertex{vector<bool>cut;//cut[i]==true,i是割点intdfn[N],low[N];constvector<int>*adj;intn,clk,root;voiddfs_t(intu){dfn[u]=low[u]=++clk;intcnt=0;//DFS树的u子树中,去掉u能新增的连通块数for(intto:adj[u]){if(dfn[to]==0){dfs_t(to);low[u]=min(low[u],low[to]);if(low[to]>=dfn[u])++cnt;}elselow[u]=min(low[u],dfn[to]);}if((u!=root&&cnt>=1)||cnt>=2)cut[u]=true;elsecut[u]=false;}voidRun(int_n,constvector<int>adj[]){n=_n;clk=0;cut.assign(n+3,false);fill(low,low+3+n,0);fill(dfn,dfn+3+n,0);this->adj=adj;for(inti=1;i<=n;++i)if(dfn[i]==0){root=i,dfs_t(i);}}vector<bool>Get(){returncut;}};constintmaxn=2*1e5+20;Cut_vertex<maxn>T;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 15:13:18

34、Bash脚本中的循环控制与故障排查

Bash脚本中的循环控制与故障排查 1. 循环控制 在Bash脚本中,循环是一种强大的工具,可用于重复执行特定的代码块。下面将介绍 while 、 until 循环以及如何在循环中控制程序流程。 1.1 while 循环 while 循环会在条件为真时持续执行代码块。以下是一个简单菜单程序…

作者头像 李华
网站建设 2026/4/14 5:36:04

直接撸起袖子开干!今天咱们聊聊怎么用LabVIEW整一个带报警记录的上位机监控系统。这玩意儿在工业现场特别实用,尤其是需要24小时盯着设备状态的时候

labview上位机监测报警记录&#xff0c;状态显示。 报警记录存储&#xff0c;存储格式txt。 csv保存文件。先看状态显示部分。LabVIEW的前面板放几个指示灯控件就能实时反映设备状态&#xff0c;比如用绿色圆形表示正常&#xff0c;红色三角表示报警。背后用个While循环不断读取…

作者头像 李华
网站建设 2026/3/29 15:13:30

基于A*算法的无人机三维动态避障路径规划设计,MATLAB编程实现

基于A* 算法的无人机三维路径规划算法&#xff0c;可以动态避障&#xff0c;自己可以规定设计障碍物位置&#xff0c;MATLAB编程实现。 无人机在三维空间耍杂技这事儿&#xff0c;靠的就是路径规划的真功夫。今天咱们来聊个硬核玩法——基于MATLAB实现的A*算法三维动态避障系统…

作者头像 李华
网站建设 2026/3/29 16:11:39

基于vue的宠物寄养机构管理系统_96zn64i1_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

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

20、GTK+ Tree View 开发指南

GTK+ Tree View 开发指南 1. 引言 在 GTK+ 开发中,Tree View 是一个非常重要的组件,它实现了 MVC(Model-View-Controller)模式中的视图部分。用户可以通过 Tree View 与数据进行交互,如选择行、展开或折叠树等。本文将详细介绍 GTK+ 中 Tree View 的相关函数、属性、信号…

作者头像 李华
网站建设 2026/4/14 0:55:02

22、文本缓冲区操作全解析

文本缓冲区操作全解析 1. 文本缓冲区基础 1.1 基本特性 文本缓冲区采用 UTF - 8 编码,这使得字节计数(索引)和字符计数(偏移量)有所不同。一个文本缓冲区至少包含一行(可能为空),除最后一行外,每行以行分隔符结尾,行分隔符被视为一个字符,它可以是 Unix 换行符、…

作者头像 李华