[复习] 图连通性

news/2024/10/25 7:07:13/文章来源:https://www.cnblogs.com/dccy/p/18501666

[复习] 图连通性

搜索生成树

定义(无向边方向是边第一次被遍历时所指的方向)

  • 树边,搜索到一个新的点连的边,构成生成树。
  • 返祖边,搜索到一个指向当前点到根的路径上的一个点的边。
  • 前向边,指向生成树子树内一个点的边。
  • 横叉边,其他边,指向兄弟子树。

有向图dfs生成树 以上四种边都有。

无向图dfs生成树 只有树边和返祖边。

无向图bfs生成树 只有树边和横叉边。

Tarjan 算法

SCC 强连通分量

在有向图中,两个点强连通当且仅当两点互相可达。

强连通分量是极大的满足每个点两两强联通的子图。

注意到在 \(dfs\) 树上,一个环只有可能由树边和返祖边构成。

定义 \(dfn\) 表示 \(dfs\) 序,\(low\) 表示经过树边和返祖边能到达的最小的 \(dfn\)

如果一个点的 \(dfn=low\) 那么它就是这个 SCC 中深度最小的点。

我们到达一个新的点,将它加入栈,之后只用栈中的 \(dfn\) 更新 \(low\)

同时当我们找到一个 \(dfn_x=low_x\) 时,此时栈中在 \(x\) 以上的点都和 \(x\) 在用一个 SCC 中。

vector<int> g[N];
int dfn[N],low[N],dfn1;
int stk[N],bz[N],top; // bz:是否在栈中
int scc[N],sc; // 所在 SCC 的标号
void dfs(int x){dfn[x]=low[x]=++dfn1,stk[++top]=x,bz[x]=1;for(int v:g[x]) if(!dfn[v])dfs(v),low[x]=min(low[x],low[v]);else if(bz[v])low[x]=min(low[x],dfn[v]);if(dfn[x]==low[x]){++sc;while(bz[x])scc[stk[top]]=sc,bz[stk[top--]]=0;}
}

SCC 标号与拓扑序

SCC 的标号是 SCC 缩点后形成的 DAG 的拓扑序的逆序。

边双连通分量

无向图。

分量内,删除任意一条边后,任意两个点可达。

连接分量的边叫做桥,或割边。

点的边双连通性具有传递性。

在无向图中,\(dfn\) 表示 \(dfs\) 序,\(low\) 表示不经过父边能到达的最小 \(dfn\)

因此我们需要在 \(dfs\) 中记录父亲的

如果树边 \((x,v)\) 满足 \(low_v>dfn_x\) 则这条边是桥。

点双连通分量

删掉一个点后,分量内任意点两点可达。

一个点可能属于多个点双,此时这个点是割点。

点的点双连通性不具有传递性,因为一个点可能属于多个点双。

但一条边一定只属于一个点双。

如果树边 \((x,v)\) 满足 \(low_v\ge dfn_x\) 那么 \(x\) 是割点,并且对于同一个 \(x\) 有不同的 \(v\) 满足这个条件,那么每个 \(v\) 都属于不同的点双。

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

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

相关文章

美团商家联系方式批量采集软件地图卖家电话提取器

美团商家联系方式批量采集软件地图卖家电话提取器作者V♥553813195欢迎交流 关于美团商家联系方式批量采集软件及地图卖家电话提取器,这类软件通常旨在帮助用户快速、批量地获取美团平台上商家的联系方式,包括但不限于电话号码。以下是对这类软件的详细介绍:一、软件功能 批…

抖音抖店商家联系方式批量提取软件快手卖家联系方式批量采集器

作者V♥553813195抖音抖店商家联系方式批量提取软件快手卖家联系方式批量采集器 由于直接获取抖音精选联盟商家信息的代码涉及到访问抖音的API,而这些API通常是私有的、受保护的,并且需要特定的授权和认证才能访问,因此我无法直接提供一个能够直接获取这些信息的代码示例。 …

读数据工程之道:设计和构建健壮的数据系统19数据存储系统 (下)

数据存储系统(下)1. 对象存储 1.1. 对象存储包含各种形状和大小的对象1.1.1. Amazon S3、Azure Blob Storage和Google Cloud Storage(GCS)是广泛使用的对象存储1.1.2. 许多云数据仓库(以及越来越多的数据库)利用对象存储作为其存储层,而云数据湖通常位于对象存储上1.1.3. 对…

关于 服务器的 http server 架设与配置 梳理

目标:想将自己的一些文件放到服务器上,然后谁都能下载,由于不懂这方面,所以跟着网上教程走,但是还是踩了好多坑.这里再梳理一下.首先肯定是要有个自己的云服务器. 然后开始搭建 web服务器.这里我是跟着一个教程走的,用的是 nginx. 链接:Http服务器搭建-CSDN博客怕博主删了,这里…

Codeforces Round 981 div3 个人题解(A~G)

Codeforces Round 981 div3 个人题解(A~G) Dashboard - Codeforces Round 981 (Div. 3) - Codeforces 火车头 #define _CRT_SECURE_NO_WARNINGS 1#include <algorithm> #include <array> #include <bitset> #include <cmath> #include <cstdio> …

JetBrains终于正式宣布:WebStorm免费开放个人开发者使用了!

10 月 24 日,正值程序员节之际,JetBrains 正式宣布:WebStorm 个人版现已全面免费开放使用。众所周知,WebStorm 是一个非常好用的 IDE,但是不免费。为响应开发者社区的需求,JetBrains 决定,针对非商业用途,WebStorm 个人版将不再收取费用,真正实现了对个人开发者的免费…

ubuntu22.04桌面版开启root用户登陆并开启root用户远程ssh连接

ubuntu22.04桌面版开启root用户登陆并开启root用户远程ssh连接最近在使用Ubuntu22.04时需要用到root用户登录桌面,于是配置了下系统,也在网上查找了类似的文章,发现几篇文章都操作都存在一定的问题,所以在这里写了一份较为完整的,这份文档是清澈过可以正常使用运行的,具体…

Arm64内存模型、内存类型、性能与DMA

一、背景 写下本文的原因来自一次 bug 排查,平台为某个 Arm64 处理器。 问题简单来说就是,就是申请一块 dma-buf 并映射到用户空间,对 buffer 使用memcpy()时发现一些异常性能问题:从 dma-buf 向通过malloc()申请的普通堆内存拷贝速度,远慢于从普通堆内存向 dma-buf 拷贝的…

[rCore学习笔记 030] 虚拟地址与地址空间

时隔很久,终于忙里偷闲可以搞一搞rCore,上帝啊,保佑我日更吧,我真的很想学会. 导读部分 首先还是要看官方文档. 我决定看一遍然后自己表述一遍(智将). 这里反复提到MMU,就是因为之前学MCU的时候有一个疑问,就是为什么MCU上不选择跑一个Linux,当时找到的答案是因为没有MMU. MMU的…

11. 使用MySQL之使用数据处理函数

1. 函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据。 函数一般是在数据上执行的,它给数据的转换和处理提供了方便。 在前一章中用来去掉串尾空格的RTrim()就是一个函数的例子。 补充: 函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable…

【CodeForces训练记录】Codeforces Round 981 (Div. 3)

https://codeforces.com/contest/2033 训练情况 22队长率先开出E题,但是结局可能还是掉分了 TAT赛后反思 这场太板了,D题有点反常(存疑?) A题 我们直接模拟位置的变化就行,先手 \(-2 \times i - 1\) 后手 \(+ 2 \times i - 1\),用一个while找到 \(>n\) 的地方来结束循…