news 2026/4/16 11:01:21

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/14 20:49:20

台达DVPES2系列PLC与欧姆龙E5CC温控器通讯实现温控

台达DVPES2系列PLC与3台欧姆龙E5CC温控器通讯程序(TDES-7) 功能&#xff1a;采用台达DVPES2型号PLC&#xff0c;对3台欧姆龙E5CC温控器通过485方式&#xff0c;modbus协议&#xff0c;进行温度的设定&#xff0c;实际温度读取硬件&#xff1a;台达DVP24ES2系列PLC&#xff0c;欧…

作者头像 李华
网站建设 2026/4/15 13:58:56

Flink SQL Time Travel用 FOR SYSTEM_TIME AS OF 查询历史快照

1. Time Travel 是什么&#xff0c;能解决什么问题 Time Travel&#xff08;时间旅行&#xff09;用于查询表在某个历史时间点的“数据与表结构状态”。你可以指定一个时间点&#xff0c;让 Flink 返回该时间点对应的表数据&#xff0c;适合做&#xff1a; 历史对账、回溯分析…

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

36、脚本编程中的参数、循环与数据处理

脚本编程中的参数、循环与数据处理 1. 位置参数 位置参数在脚本编程中是非常重要的概念,它们允许我们在执行脚本时传递参数。以下是不同形式的位置参数及其结果: | 形式 | 结果 | | ---- | ---- | | $1 = word $2 = words $3 = with $4 = spaces | 原始位置参…

作者头像 李华
网站建设 2026/4/7 9:16:53

Arduino UNO Q 烘托圣诞节气氛

本示例将传统LED控制升级为沉浸式节日体验&#xff0c;基于Arduino UNO Q开发。系统包含交互式圣诞树、音乐播放器和实时视觉反馈。通过简单的网络用户界面来切换板载 LED 的状态。应用程序通过网络浏览器监听用户输入并相应地更新 LED 状态。它展示了如何在 Linux 环境中与硬件…

作者头像 李华
网站建设 2026/4/14 20:16:50

【思维模型】第一性原理 ③ ( 5 Why 分析法 | 明确问题 | 层层深入 | 验证原因 | 改进措施 )

文章目录一、5 Why 分析法1、概念简介2、核心原则3、实施步骤4、关键技巧5、常见误区6、案例分析在 【思维模型】第一性原理 ② ( 利用 “ 第一性原理 “ 进行创新 : 归零 -&#xff1e; 解构 -&#xff1e; 重构 | 跨学科学习 ) 博客中 , 屡次提到了 5 Why 分析法 , 本篇博客简…

作者头像 李华
网站建设 2026/4/15 19:50:57

AI:深度学习的前向传播和反向传播

深度学习的前向传播和反向传播是神经网络训练的核心机制&#xff0c;前者负责生成预测结果&#xff0c;后者负责根据误差优化模型参数&#xff0c;二者共同构成一个完整的训练迭代循环。 一、前向传播&#xff08;Forward Propagation&#xff09; 前向传播是神经网络从输入到输…

作者头像 李华