Tarjan算法和连通性相关(二)

news/2025/1/18 9:06:23/文章来源:https://www.cnblogs.com/isletfall/p/18339016

上一篇博客我们介绍了强连通分量,本文我们继续学习与连通性有关的一些概念

割点

什么是割点?

对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点

我们画个图理解一下:

在这个图中,如果我们把 3 这个点给删除掉,那么这张图就会被拆分成两个部分,极大联通分量数就会增加,所以 3 这个点是割点,可以证明其他点都不是割点

怎么求割点?

与求强连通分量的方法类似,我们可以用Tarjan的思想去求割点

我们取图中的一个点,以它为起点开始做DFS,并维护DFS序,同时与求强连通分量的方法类似,我们也需要维护 low 数组

有了这两个信息,我们就能很快判断一个点是不是割点,因为对于某个顶点 u ,如果存在至少一个儿子顶点 v 使得 \(low[v]\) \(\ge\) $dfn[u] $ ,那么

u 点就是割点,因为删去 u 点,v 点无法到达祖先结点

但是对于搜索的起始点我们需要进行特殊考虑,仔细考虑一下会发现,如果该点只有一个儿子,那么该点就不是割点,如果有两个及以上的儿子,那么该点就是割点(读者可以画图想想这是为什么)

从而,我们利用Tarjan算法求出了割点,代码如下:

void Tarjan(int u, int father){ vis[u]=true;low[u]=dfn[u]=++dfncnt;int child=0;for(auto v:g[u]){if(!vis[v]){child++;Tarjan(v,u);low[u]=min(low[u],low[v]);if (father!=u&&low[v]>=dfn[u]&&!flag[u]){flag[u]=true;res++;}} else if(v!=father){low[u]=min(low[u],dfn[v]);}}if (father==u&&child>=2&&!flag[u]){flag[u]=true;res++;}
}

桥(割边)

什么是桥?

对于一个无向图,如果删掉一条边后图中的连通分量数增加了,则称这条边为桥或者割边,如图,红色的那条边就是桥

怎么求桥?

和求割点的思想差不多,只要将更新状态时改成 \(low[v]\) \(\gt\) $dfn[u] $ 就可以了,并且我们不需要考虑根节点的问题(读者也可以画图想想为什么)

代码如下:

void tarjan(int u, int fa) {father[u]=fa;low[u]=dfn[u]=++dfncnt;for (auto v:g[u]) {if (!dfn[v]) {tarjan(v,u);low[u]=min(low[u],low[v]);if (low[v]>dfn[u]) {isbridge[v]=true;++cnt_bridge;}} else if(dfn[v]<dfn[u]&&v!=fa){low[u]=min(low[u],dfn[v]);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/776659.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin 字符串教程:深入理解与使用技巧

Kotlin中的字符串用于存储文本,定义时使用双引号包围字符序列,如`var greeting = "Hello"`。Kotlin能自动推断变量类型,但在未初始化时需显式指定类型,如`var name: String`。可通过索引访问字符串元素,如`txt[0]`获取首字符。字符串作为对象,拥有属性和方法,…

Zabbix搭建

目录zabbix搭建1. 前置环境准备1.1 搭建LNMP2. zabbix准备工作2.1 安装php模块以及编译所需工具2.2 修改php配置2.3 编译安装zabbix2.3.1 下载tar包2.3.2 解压2.3.3 创建用户/组2.3.4 开始安装2.3.5 配置数据库3. 配置zabbix3.1 修改配置文件3.2 Web界面部署4. 安装agent5. 添加…

苍穹外卖项目--学习笔记

苍穹外卖学习文档 软件开发整体介绍 软件开发流程 需求分析 需求规格说明书、产品原型 设计 UI设计、数据库设计、接口设计 编码 项目代码、单元测试 测试 测试用例、测试报告 上线运维 软件环境安装、配置 角色分工项目经理 对整体项目负责,任务分配、把控进度产品经理 进行需…

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语…

魔鬼训练营-第四章学习笔记(上)

4.1.5 基于Metasploit框架的Web应用渗透技术 代码清单4-1 Metasploit下初始化wmap使用wmap进行扫描wmap官网有介绍,介绍得也比书中详细,可在后续练习中测试该工具功能是否仍然强大代码清单4-8 直接照搬书中,按照其代码复现似乎有点问题,需要另想办法复现wXf 似乎已失效,后…

stable diffusion 实践与测试

stable diffusion 实践与测试 放大 原图高清放大 原始图片当不满意图片质量的时候 使用stable diffusion进行二次处理 选择适合图片风格的模型,再次根据图片写出提示词输入原图像1024尺寸之后调整重绘幅度采样器automatic在这里会选择karras原图异变放大 a dog,orange_overall…

阮一峰的网络日志 (2024年)

FastDownload.io一个下载各种流媒体视频的在线工具,支持 Youtube 和 TikTok。Essay.ArtGPT4 批改雅思和托福作文。

vscode在WSL Ubuntu 18.04下使用,GLIBC_2.28问题

vscode 1.85是可以在Ubuntu18.04用的,后面的版本就会报这个问题。 报错信息: /home/alex/.vscode-server/bin/f1e16e1e6214d7c44d078b1f0607b2388f29d729/node: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28 not found (required by /home/alex/.vscode-server/bin…

Jenkins+Jmeter部署性能测试平台

安装部署Jenkins 现在网上信息很多本次不再赘述 安装Jmeter 本次也不做赘述,另外搜资料吧 Jmeter脚本设置Jenkins设置 1.安装插件performance,build with parameter2.新建项目里配置 勾建方式勾建步骤cd /home/jmeterWorkplace/performancetesting/script /home/app/apache-j…

vue使用Element-plus创建个性按钮

npm install element-plus --save 下载element-plus 2.npm install -D unplugin-vue-components unplugin-auto-import 导入方式:自动导入 不需要安装插件 3.配置文件 将: import AutoImport from unplugin-auto-import/vite import Components from unplugin-vue-components…

【笔记】计数选讲:容斥、LGV、集合幂级数、GF 2024.8.2

计数工具展览今天写的很乱。 [HEOI2013] SAO 容斥。因为我们已经知道父亲 \(<\) 儿子时的情况(\(n!/\prod_i siz_i\),也适用于森林),那么儿子 \(<\) 父亲的情况就容斥掉,无限制的就当作那条边不存在。树上背包,记录当前节点为根的连通块大小和容斥系数的积。 *[ECF…