Tarjan算法附图详解(SCC)

Tarjan算法详解(AcWing 1174 受欢迎的牛) 题目描述: 每一头牛的愿望就是变成一头最受欢迎的牛。 现在有 N 头牛,编号从 1 到 N,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎。 这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。 你的任务是求出有多少头牛被除自己之外的所有牛认为是受欢迎的。 输入格式 第一行两个数 N,M; 接下来 M 行,每行两个数 A,B,意思是 A 认为 B 是受欢迎的(给出的信息有可能重复,即有可能出现多个 A,B)。 输出格式 输出被除自己之外的 阅读详情

Tarjan算法用于有向图,用于找强连通区域,割边等,属于图论内容。

它的思路类似于DFS + Union Find,
下面来详细介绍:

图和详细视频参考链接

首先任意选一点作为起点做DFS,DFS的过程中要给各node标上id
在这里插入图片描述
然后每个node有一个low link value,
简单解释这是表示当前node能到达的node中最小的id(包括它自己的id)
比如node1,它能到达的node中最小id是0
node2 和 3能到达的最小id是2,同理4,5
在这里插入图片描述
好了,现在概念清楚了,
我们可以看到有相同low link value的node在一个强连通区域。

下面要解决的问题是怎么样在DFS的过程中更新low link value。

首先我们认识到当node的id和它的low link value相同时,说明又回到了起点,进入了SCC(强连通区域),
比如node 0, 2, 4

DFS需要一个stack装入现在正在访问的node,
还要一个visited数组记录node是否已经被访问过,防止重复遍历。

从任意的0点出发,DFS
像下图这样,正在访问的0,1,2压入stack,
然后出现了在0处,它的id和low link value相同,说明进入了SCC,开始回溯,
回溯的时候更新stack.top点的low link value, 就是node 2,
2和0是相通的,都在stack里,所以2的low link value和 node 0 应该相同,更新lowlink[2],
把当前SCC的node全部从stack中取出,更新low link value
在这里插入图片描述
然后任选另一起点继续上面的过程,
然后到node 5的时候,又到了0,但是现在0不在stack里面,所以不更新low link value。
在这里插入图片描述
同理经过node 6到了node 2, node 2不在stack里面,所以也不更新low link value
然后到node 4, node 4的id和low link value相等,所以开始回溯。
在这里插入图片描述
得到第2个SCC
在这里插入图片描述
虽然node 3的id和low link value相同,但是还不能判断SCC,因为node还没访问完呢,

最后找到了所有的SCC
在这里插入图片描述

Tarjan算法详解 目录一、什么是强连通分量1. 概念2. 强连通分量二、两种dfs遍历1. 方式12. 方式2三、一个简单例子理解算法四、更完整的一个例子五、Code实现 一、什么是强连通分量 tarjan强连通分量算法 1. 概念 连通:无向图中,从任意点i可到达任一点j 强连通:有向图中,从任意点i可到达任一点j 弱连通:把有向图看作无向图时,从任意点i可到达任一点j 如图,强连通无论那个点,都能按照方向到达任意一点,弱连通如果强行按方向,那么B到不了C,A到不了B和C,C到不了B。但如果把他看作是无向图,那么他们也 阅读详情

相关推荐

强连通分量(SCC)的Tarjan算法

强连通分量

ZYK1997 733

Tarjan 算法(超详细!!)

之前太多错误了,重构了

WerChange的OI博客 7281

Tarjan算法详解(包含人工栈写法)

一、Tarjan算法简介 Tarjan算法是由Robert Tarjan发明的一种基于DFS的图论算法,他可以用来求解有向图的强联通 分量或者求解无向图的中的割点和桥等,可以说是图论算法中的基本算法之一。本文将以求解有向 图的强联通分量来介绍Tarjan算法。 二、有向图的强联通 有向图的两个结点可以相互到达,他们便在一个强联通分量内,如图所示: 其中{1,2,3,5}四个结点可以相互到达,...

weixin_42137657的博客 1915

Tarjan算法超超超详解(ACM/OI)(强连通分量/缩点)(图论)(C++)

深入浅出的Tarjan算法手把手讲解!看完就会!

qaqwqaqwq的博客 1万+

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1873

Lumerical FDTD新手教程:5步搞定MMI波导光谱模拟(附避坑指南)

本文提供Lumerical FDTD新手教程,详细讲解5步完成MMI波导光谱模拟的实用方法,包括环境准备、结构建模、光源配置、仿真优化和结果分析。特别针对多模干涉耦合器(MMI)的模拟难点,提供避坑指南和优化策略,帮助光学工程师快速掌握FDTD仿真技术。

kite3的博客 358

Tarjan算法解析及Java代码实现(附图)

以下概念为有向图中的定义: 强连通: 在一个有向图G里,如果有两个点(a、b)可以相互到达,我们就叫这两个顶点(a,b)为强连通。 强连通图: 如果在一个有向图G中,每两个点都强连通(可以相互到达),我们就叫这个图为强连通图。 强连通分量(SCC):在一个有向图G中,有一个子图,这个子图每2个点都满足强连通,我们就叫这个子图叫做 强连通分量,孤立的点也是一个强连通分量。 例:下图中,子...

SpringRolls的博客 1789

RK3588 C-PHY摄像头驱动升级踩坑记:从‘Only CSI2 supported’报错到成功取流

本文详细记录了在RK3588平台上调试C-PHY摄像头驱动的全过程,从‘Only CSI2 supported’报错分析到成功取流。内容涵盖C-PHY与CSI-2协议差异、SDK版本对比、V4L2框架下的bus-type解析机制,以及硬件排查与寄存器调优实战经验,为嵌入式Camera驱动工程师提供宝贵参考。

weixin_42522374的博客 122

Tarjan算法

还记得无向图判连通块吗?对于无向图中,判连通块是一件很容易的事。你只需要dfs(深度优先搜索)一下就可以了。但是,如果我们把无向图换成有向图呢?这就是另一个故事了…计算机科学家,以,等算法闻名。是求强连通分量的一个强力的算法。要理解这个算法,我们先讲几个定义:神奇海螺结束!先讲一下我们要用到的数组。:第iii个节点他的时间戳:第iii个节点他最多经过一条返祖边所能到达的最小时间戳:一个栈,用来储存当前还未确定但已经扩展过的点:第iii个节点他所在的强连通分量编号我们讲一下算法流程。此时来到了点uuu扩展他的

qq_61768466的博客 1523

PyTorch实战:手把手教你用QAT量化感知训练拯救模型精度(附避坑指南)

本文详细介绍了如何使用PyTorch进行QAT量化感知训练,以提升模型在边缘设备上的推理精度。通过核心原理讲解、实战代码示例和避坑指南,帮助开发者掌握从环境配置、模型训练到边缘部署的全流程,有效解决传统量化方法导致的精度损失问题。

c7d8e的博客 325

Python实现将txt文件转换成对应的excel或csv文件

此外,在上面的例子中,txt文件是以“空格”分隔的,如果遇到“逗号”分隔的,只需将上述代码中的。本文是该专栏的第29篇,后面会持续分享python的各种干货知识,值得关注。工作上可能会遇到这样的情况,使用python将某个txt文本,按照。转换成对应的excel文件或者是csv文件。”需要替换成你的目标txt文件的绝对路径。库,这里直接引用就好。需要注意的是,上述代码中的“

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 4506

Tarjan算法(详解 + 刷题)

包含 4 道 Tarjan 图论题目和AC代码(讲解)

IT OR 考公? 3344

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

本文详细介绍了一个基于YOLOv5/v6/v7/v8的体育赛事目标检测系统的设计与实现。系统采用先进的深度学习算法,结合PySide6图形界面,实现了对体育赛事中运动员、球类、裁判等多种目标的实时检测与跟踪。本文将全面阐述系统的架构设计、算法原理、训练流程、界面实现以及实际应用效果,并提供完整的代码实现。

YOLO 509

SCC-Tarjan算法,强连通分量算法,从dfs到Tarjan详解

如何一步步从dfs到tarjan算法?

EQUINOX1的博客 2638

从开发到生产:Power APP 的应用和编程实践

一旦您在开发环境中完成了应用程序的开发、调试和测试,就可以将其部署到生产环境中供用户使用。在 Power APP Studio 中,您可以选择将应用程序发布到 Power APP 网关或将其嵌入到其他应用程序中。使用 Power APP Studio 内置的调试工具,您可以逐步执行应用程序并查看变量的值,以确保逻辑的正确性。在上述代码中,我们通过将两个文本输入框(TextInput1 和 TextInput2)中的文本转换为数字,并将它们相加,将结果存储在 Result 变量中。

2301_79326510的博客 1504

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Tarjan算法详细讲解

Tarjan算法讲解的博客网上找到三篇比较好的,现在都转载了,个人只研究了第一篇,正如博主所说,讲的标比较详细,清晰,剩下两篇也可以看一下. 卿学姐视频讲解https://www.bilibili.com/video/av7330663/ 以下内容转自:http://www.cnblogs.com/uncle-lu/p/5876729.html 全网最详细tarjan算法讲解,我不敢说别的。反正其他tarjan算法讲解,我看了半天才看懂。我写的这个,读完一遍,发现原来tarjan这么简单! ...

木牛的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

算法:强连通分量(SCC) Tarjan算法

团号逆序是拓扑序,因为我们给强连通分量标号的时候是从1开始标的,于是团号小的在拓扑序的末端,这样从大到小枚举团号即为拓扑序,保证是线性的,这样dp的话才能满足无后效性。我们加边的时候让出度为0的点指向入度为0的点,那么只要max(din,dout)即可。强连通分量,不能再加任何一个点了,再加一个点就不是强连通了。Trajan SCC缩点。先缩点转化成一个无环图。

m0_74087709的博客 524

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浅谈用Tarjan算法求解SCC(强连通分量)问题

不是所有有向图都是强连通图,但一定存在这个图的子图中一定有强连通图,则这个字图就是原图的一个强连通分量。强连通图的强连通分量只有一个,任意有向图的强连通分量最多有点数那么多个。tarjan算法的本质就是深搜,在深搜中维护某些值。

2301_79587247的博客 1345

算法 {Tarjan算法,强连通分量SCC,BCC双连通分量,割边/桥}

1

qq_66485519的博客 1096

图论学习笔记(6):Tarjan算法(强连通分量/缩点)

Tarjan算法是一种求解有向图中强连通分量的经典算法,其核心思想是基于深度优先搜索,来求有向图的强连通分量的算法。变量名变量类型变量作用g[1010]用于构造图,存每个顶点对应得边ststack<int>用于在深度优先搜索得时候存访问的节点b[1010]bool状态数组,用于判断对于顶点是否入栈tempint时间戳,用于给顶点分配次序号dfn[1010]int节点被搜索的次序号数组,用于记录节点是第几个被深度优先搜索访问的low[1010]int。

m0_74707185的博客 2709

浅谈 Tarjan 算法

无向图中,若删去一条边会使得这个图的极大连通分量数增加,则该边被称为桥。也可以理解为无向图的一个连通块中,若删除一条边会使得至少两点之间无法相互到达,该边被称为桥。无向图中,若删去一个点会使得这个图的极大连通分量数增加,这个点被称为割点。也可以理解为无向图的一个连通块中,若删除一个点会使得至少两点之间无法相互到达,该点被称为割点。注意,强连通分量(SCC,Strongly Connected Components)是在单向图中的。强联通子图,定义为:在单向图中,该子图上的任意两点之间能互相到达。

William_Wang_的博客 5220

《图算法》第六章 社区检测算法-2

对图算法有兴趣的朋友可以关注微信公众号 :《 Medical与AI的故事》 原文链接:《《图算法》第六章-2 社区检测算法 强连接组件 强连接组件(Strongly Connected Components,SCC)算法是最早的图算法之一。SCC在有向图中查找连接的节点集,其中每个节点都可以从同一集中的任何其他节点的两个方向上访问。它的运行时操作伸缩性很好,与节点数量成比例。在图6-5中,你可以看...

Revjie的专栏 2264

Tarjan算法超详细讲解(割点割边强连通)

本文出自我的掘金博客, 欢迎大家访问传送门 今天我主要介绍Tarjan算法在割点割边以及强连通分量中的应用以及缩点技巧 按照老规矩, 先上两道模板题 【模板】强连通分量 【模板】割点(割顶) 割点割边 一, 离散数学中的定义: 割点: 无向连通图中,去掉一个顶点及和它相邻的所有边,图中的连通分量数增加,则该顶点称为割点。 割边: 无向联通图中,去掉一条边,图中的连通分量数增加,则这条边,称为...

汪阿少的博客 8030
上一篇: leetcode 1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree(在BT的copy中找到对应的节点)
下一篇: leetcode 191. Number of 1 Bits(bit中1的个数)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值