当前位置: 首页 > news >正文

20251222 - 强连通分量 总结

强连通分量

连通性的定义

  • 无向图

    • 连通:任意两点之间都可达。
    • 点双连通:任意删去一点之后任意两点之间还可达。
    • 边双连通:任意删去一边之后任意两点之间还可达。
  • 有向图

    • 弱连通:一个有向图把边替换成无向边后可以得到一张连通图。
    • 强连通:一个有向图在有向情况下就是一张连通图。

强连通分量

从原图中选出一些节点和一些边构成的图,叫做这个原图的子图

而如果该子图为连通图,则这个子图被称为连通子图

一个连通子图的节点数和边数都极大,则成它为极大连通子图

极大强连通子图被称为强连通分量,即 Strongly Connected Components,简称为 SCC。

DFS 树

DFS 树,又称为 DFS 生成树、DFS 搜索树,为遍历一张图的过程中,第一次到达每个点的每条边组成的树,根节点不算。

下图就是一张 DFS 树的示例图:

有向图中,与 DFS 树有关的有四类边:

  1. 树边(上图中黑色实线),从父节点指向还没有被访问的子节点。
  2. 反祖边(上图中红色虚线),从子孙节点指向祖先节点的边。
  3. 前向边(上图中绿色虚线),指向子树中的边。
  4. 横叉边(上图中蓝色虚线),指向已经访问过但既不是祖先节点也不是子树中的边。

注意,前向边和横叉边只在有向图的 DFS 树中存在,无向图中只有树边和返祖边。

强连通分量求解结论

DFS 树和强连通分量的关系有一条结论:对于一个 SCC 中最先被搜到的点 \(u\),这个 SCC 中剩余的其他节点一定都在以 \(u\) 为根的子树中。

证明:
采用反证法。
对于这个 SCC 中的点 \(v\),假设点 \(v\) 不在以 \(u\) 为根的子树中。那么 \(u\)\(v\) 的路径上一定有不包含在这个子树内的边,即横叉边或返祖边。这都要求指向的节点已经被访问过。
因为 \(u\)\(v\) 在同一个 SCC 中,那么访问这些更早被访问的点时肯定能访问到 \(u\),这和 \(u\) 是最先被搜到的矛盾。
得证。

实现

具体实现时,为了能快速取到被访问过节点的信息,我们采用栈(即 stack)存储所有被访问过的节点编号,找 SCC 时就取出连续一段来。

void Tarjan(int u){f[u]=(++cnt),id[u]=f[u];st.push(u),vis[u]=1;for(int v:g[u])if(!id[v])Tarjan(v),f[u]=min(f[u],f[v]);else if(vis[v])f[u]=min(f[u],id[v]);if(f[u]==id[u]){vector<int> tmp;tmp.clear();while(tmp.empty()||tmp.back()!=u)vis[st.top()]=0,tmp.pb(st.top()),st.pop();SCCs[++tot]=tmp;}return;
}
http://www.jsqmd.com/news/139847/

相关文章:

  • 【前端】svelte支持scss,包管理器是webpack
  • COMSOL手性GST相变文章复现
  • 绩效考核需要考核什么内容?
  • 写小说类型
  • 《告别无效等待:大规模第三方库项目的快速增量构建指南》
  • 抽象圣诞树
  • MAUI库推荐三:Syncfusion.Maui.Toolkit
  • 提高信噪比的操作
  • 全球化部署 多活多区域写入 → 汇总中心同步方案
  • 电动汽车时空双层调度 研究了发电机、电动汽车和风力发电的协同优化调度问题。 针对风电存在时电动...
  • Lupa库功能及使用场景介绍
  • 相机坐标系转车辆坐标系以及相反, RT矩阵,旋转变换P_cam = rot_car2cam * P_car + trans_car2cam; P_cam = rot * (P_car - trans)
  • Note -「Intro. to Computer Systems」「CS:APP」Review!
  • 安徽省宣城市国控集团党委书记、董事长钱邦青一行到访国联股份卫多多
  • 从化文旅宣传策划公司推荐:效率提升80%方案引追捧 - 品牌测评家
  • 跑分第一的Gpt Image 1.5真的干过了Nano banana Pro?深度测评+便宜稳定0.02/张APi接入教程
  • MiniMax - yi
  • 机器学习时间特征处理:循环编码(Cyclical Encoding)与其在预测模型中的应用
  • 百炼成钢:小金鱼的软件工程课程总结
  • 基于SpringBoot泰山登山陪爬平台的设计与实现(毕设源码+文档)
  • 计算机基础小题
  • 4 倍扩容 + 700 + 流程图极速展示!ProDB×TDengine 赋能泰州石化
  • 基于SpringBoot特色农产品销售系统(毕设源码+文档)
  • 游戏手柄电池选购指南:聚电新能源成靠谱之选 - 工业品网
  • 手把手教你用MCGS撸一个立体车库控制系统
  • 《从视觉到听觉:游戏状态信息的屏幕阅读器适配底层逻辑》
  • 自动驾驶控制-纯跟踪算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶纯跟踪控...
  • PMP学习笔记--环境
  • 从数据瓶颈到ROAS飙升21%!Skygo牵手热力引擎,按下游戏增长快进键
  • 知识城燕窝推荐:最新五大专业品牌精选 - 品牌测评家