强连通分量

图论——强连通分量详解! 强连通分量等概念Tarjan算法的过程与实现就讲这么多,平时练习多注意vector与链式前向星的转换。今宵东方不见日,总有夜尽天明时。加油拜拜~~~(特意标红。。。 阅读详情

先说一下强连通分量是个什么鬼吧。

说白了,就是在有向图的子图中任意两个点A B,A可以到B且 B可以到A就是强连通分量了。

原谅我的语文差到措辞措到没逻辑

 

我就说一下我常用的两种算法吧...代码丑什么的请见谅。

 

Tarjan:(具体内容请见上一篇blog中间部分【又懒得给链接】)

...说白了就是缩点..???

QAQ解释不清楚直接给代码算了_(:з」∠)_

 

void dfs(int u)
{
	dfn[u]=low[u]=++cnt;inq[u]=1;ss.push(u);
	for(int i=0;i<a[u].size();i++)
		if(!dfn[a[u][i]])
		{
			dfs(a[u][i]);
			low[u]=min(low[u],low[a[u][i]]);
		}
		else if(inq[a[u][i]]) low[u]=min(low[u],dfn[a[u][i]]);
	if(dfn[u]==low[u])
	{
		int r=0;ct++;
		while(r!=u&&!ss.empty())
		{
			r=ss.top();
			inq[r]=0;
			v[r]=ct;
			ss.pop();
		}
	}
}

 

 

 

 

 

还有一种算法然而我自己都不知道那叫什么..QWQ

反正就是先dfs一遍后序存标号然后把边反向从标号最大的开始dfs..怎么我解释起来就那么迷之抽象呢

不管了不管了直接给代码算了

 

void dfs1(int u)
{
	v[u]=1;
	for(int i=0;i<a[u].size();i++)
		if(!v[a[u][i]]) dfs1(a[u][i]);
	c[++cnt]=u;
}
void dfs2(int u)
{
	v[u]=q[u]=1;ss[++s]=u;
	for(int i=0;i<b[u].size();i++)
		if(!v[b[u][i]]) dfs2(b[u][i]);
}
for(i=0;i<n*4;i++)
				if(!v[i]) dfs1(i);
			for(i=0;i<n*4;i++)
				for(j=0;j<a[i].size();j++)
					b[a[i][j]].push_back(i);
			memset(v,0,sizeof(v));
			for(i=n*4;i>0;i--)
				if(!v[c[i]])
				{
					s=0;memset(q,0,sizeof(q));
					dfs2(c[i]);
					for(j=1;j<=s;j++)
						if((ss[j]<n*2&&q[ss[j]+n*2])||(ss[j]>=n*2&&q[ss[j]-n*2])) {f=1;break;}
					if(f) break;
				}


由于只是判断有没有解所以写得特别丑陋所以各位将就着看吧...

 

 

 

一些题目(待填坑):

 

 


 

算法竞赛——强连通分量 强连通分量 强连通的定义是:有向图 G 强连通是指,G 中任意两个结点连通。 强连通分量(Strongly Connected Components,SCC)的定义是:极大的强连通子图也可以说,在强连图图的基础上加入一些点和路径,使得当前的图不在强连通,称原来的强连通的部分为强连通分量。 DFS生成树 DFS生成树是根据DFS搜索顺序构成的一颗生成树,形如(自上而下,自左而右): 有向图的 DFS 生成树主要有 4 种边: 树边(tree edge):示意图中以黑色边表示,每次搜索找到一个还没有访问过 阅读详情

相关推荐

强连通分量分解详解 超级详细

首先我们得了解,什么是强连通? 其次我们得了解,什么是强连通分量? 最后我们得了解,什么是强连通分量? #include <iostream> #include <stdio.h> #include <vector> #include <string.h> using namespace std; vector<int> data[10005]; vector<int> rdata[10005]; vector<int> f

gronkie的博客 4953

模板总结——强连通分量

基本概念 对于有向图上的2个点a,b,若存在一条从a到b的路径,也存在一条从b到a的路径,那么称a,b是强连通的。 对于有向图上的一个子图,若子图内任意点对(a,b)都满足强连通,则称该子图为强连通子图。 非强连通图有向图的极大强连通子图,称为强连通分量。 特别地,和任何一个点都不强连通的单个点也是一个强连通分量。 tarjan算法伪代码 tarjan(u) { Dfn[u]=...

EnjoyingAC的博客 1123

强连通分量总结

1主要写两个算法 1.1强连通分量之Korasaju 这个算法主要依赖的是图G与图G的转置强连通分量是一样的。 具体证明先不考虑了(既是强连通分量,正向可以到达,反向一定也可以到达)。 实现过程 1.    dfs原图G,并且记录结束时间(后序)。后序越大,为相对的根节点。(先这样理解) 2.    给后序节点从大到小排序。 3.    依次取后序大的节点在G的转置图上进行dfs,跳

野生的TFgirl 3435

记强连通分量的学习

第一部分------求强连通分量1.强连通分量的概念"有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi&gt;vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected compon...

308宿舍的鶸 420

【图论】有向图的强连通分量

目录有向图的强连通分量如何求强连通分量(TarjanTarjanTarjan算法)受欢迎的牛学校网络最大半连通子图 有向图的强连通分量 连通分量: 对于分量中任意两点u,vu,vu,v,必然可以从uuu走到vvv,且从vvv走到uuu。 强连通分量(SCCSCCSCC): 极大连通分量。一个连通分量加上任何一些点都不是连通分量了,该连通分量就是强连通分量。 强连通分量的作用: 将任意有向图通过==缩点(将所有连通分量缩成一个点)==转换成向无环图(DAGDAGDAG)。 常见应用:对于上图,将有向图缩点之

a碟的博客 3745

关于强连通分量浅谈

强连通分量由美国计算机科学家 Robert Tarjan 提出。 Tarjan 职业:计算机科学家 主要成就:设计了求解的应用领域的许多问题的广泛有效的算法和数据结构等,1986年获得图灵奖. 简介:Robert Tarjan,计算机科学家,以LCA、强连通分量等算法闻名。他拥有丰富的商业工作经验,1985年开始任教于普林斯顿大学。 事实上上述并没有什么用。如果真的想知道就上百...

sp201604的博客 1154

强连通分量个数的求法(图解)

强连通分量个数的求法(图解) 背景 最近刷软考题的时候,碰到2013年上半年软件设计师的第31题,求程序图的环路复杂度。答案解析中有这么一段话: 根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出: V(G)=m−n+2p(∗)V(G)=m-n+2p(*)V(G)=m−n+2p(∗) 其中,V(G)是有向图G中的环路数,m是图G中弧的个数,n是图G中的结点数,p是图G中的强连通分量个数。 因为一直习惯了用V=m-n+2的公式计算,所以刚看到(*)公式时有点反应不过来,算是自己学习上的一个

weixin_38327135的博客 2万+

基于MATLAB/Simulink的四旋翼无人机PID控制与仿真(3)

《基于MATLAB/Simulink的四旋翼无人机PID控制与仿真》的第三篇,将为大家继续展示并完善控制与仿真模型。本文将在前文的基础上,完成控制环节增补、参数设置、测试等工作,在不考虑性能(低超调、快、准等)的前提下,保证系统对于一般输入(阶跃、斜坡)的响应稳定性。

jlx142857的博客 9321

强连通分量及缩点tarjan算法解析

强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Time, DFN[N], Low[N]; DFN[i]表示 遍历到 i 点时是第几次dfs Low[u] 表示 以u点为父节点的 子树 能连接到 [栈中] 最上端的点   int

九野的博客 72万+

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3287

SPSSAU 中介效应分析实战:Bootstrap 95%置信区间解读的3个关键步骤

本文详细解析了SPSSAU中介效应分析中Bootstrap 95%置信区间的解读方法,涵盖三种典型场景的判别标准与应对策略。通过实战操作指南,帮助研究者准确判断中介效应显著性,特别针对边界模糊和小样本情况提供专业建议,提升统计分析结果的可靠性。

weixin_33691817的博客 498

有向图的强连通分量

1.定义 在一个有向图中,如果有两个点 (u,v)(u,v)(u,v)可以在图中互相到达,那么就称这两个点是强联通的.。而如果一个有向图上的任意两点都可以互相到达,那么就成这个图为强连通图。而一个有向图中的极大强连通子图就被称为强连通分量。(极大强连通子图就是指一个强连通子图,再加入任何额外的节点都无法保证这个新的图是一个强连通图) 举个例子: 显然这个图里两个点集[1,3,5][1,3, 5][1,3,5]和 [2,4][2, 4][2,4],在各自点集里的各个点都可以互相到达,且不存在更大的点集,所以

SteveMC的博客 8270

配置思科交换机冗余链路汇聚

本文对交换机端口汇聚配置进行说明

istrangeboy&begin zero的博客 6684

20250819 强连通分量,边双总结

连通分量:无向图中所有节点相互连通的子图。弱连通分量:将有向图所有边视为无向边后,所有节点相互连通的子图。强连通分量:有向图中任意两个节点互相连通的子图。点双连通分量:连通子图中删除任一节点后,其余节点仍保持连通。边双连通分量:连通子图中删除任一条边后,其余节点仍保持连通。

scx20131004的博客 1595

IMU、INS、GNSS与组合导航:从原理到工程实践全解析

在自动驾驶、无人机和机器人等智能系统的定位方案中,IMU、INS、GNSS和组合导航常被混为一谈,但它们在硬件层级、数据特性和误差机制上截然不同。IMU作为惯性测量单元,以百赫兹以上频率输出加速度和角速度;INS基于IMU完成姿态、速度与位置的递推解算,却因积分累积误差而随时间漂移;GNSS提供绝对位置,但易受遮挡和干扰。组合导航通过卡尔曼滤波将两者融合,实现短期不飘、长期不偏的连续定位,这正是高精度导航系统的技术底座。工程落地时,从IMU标定、Allan方差分析到相机/LiDAR与IMU外参标定,再到松耦

weixin_29193259的博客 381

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解(Python/JS/C/C++)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释发现新题目,随时更新。

学Java,找哪吒 5万+

有向图的强连通分量算法

强连通分量 Tarjan算法, Kosaraju 算法

Jasonchen1224的博客 4755

华为Ascend_toolkit在x86ubuntu安装失败报错。[WARNING] driver package is not installed. If you install in docker

这个报错发生在交叉编译配置Ascend_toolkit环境时,安装Ascend_toolkit安装包的时候发生。[Y/N]Y。

anananajiushiwo的博客 1019

Tarjan求强连通分量

[算法定义] 在有向图中,如果两个顶点至少存在一条路径(可以相互通达),则称两个顶点强连通(strongly connected)。 如果有向图G的每两个顶点都强连通,称G是一个强连通图。 非强连通有向图的极大强连通子图,称为强连通分量(strongly connected components)。 在上图中,{1 , 2 , 3 , 4 } , { 5 } , { 6 } 三个区域...

weixin_44959460的博客 5280

从零打造高速 SerDes 系统:一步步教你生成 IBIS-AMI 模型!(含Simulink实操)

一个完整的 SerDes 系统,不止是电路设计,更是 SI 仿真、IBIS建模、系统验证三位一体的过程。用 MATLAB 的 SerDes Designer + Simulink 组合拳,不仅可以快速完成设计,还能无缝衔接工业标准流程,非常适合个人学习 & 企业验证。如果你还没用过,建议马上动手试一遍,毕竟:“光说不练假把式,跑出眼图才是王道!”🔥。

weixin_43199439的博客 1143

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

关于强连通分量

首先要明白什么是强连通分量? 强连通分量实际上指的是一些点的集合,而这个集合的定义就是:任意集合中的点都能到达其他所有同样在集合中的点 然后就是强连通分量的意义,或者说是作用: 就目前而言,我认为他的作用就是缩点。 什么叫做缩点呢? 就是当把整个图中的点分成多个不同的集合以后,每个集合都可以看成一个点。然后每个集合之间的连线就像这些超级点的连线一样。 为什么要缩点? 这有点像物理中的

LLPPDD的博客 4721

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: (1668): 割点和割边
下一篇: 2-sat
dogeding
博客等级 码龄10年 31粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值