trajan 塔杨算法 求割点,割边

1192criticalConnections 查找集群内的「关键连接」

1 题目

https://leetcode.cn/problems/critical-connections-in-a-network/

2 解题思路

  • 1 解题思路:使用tarjan算法:求割点和割边

    • 算法实现参考:https://www.cnblogs.com/collectionne/p/6847240.html
    • 一句话概括算法:dfsNo[i]: i号节点dfs的顺序, low[i]:i号节点以及其子树中所有的搜索节点仅通过 回边 能够到达的节点的dfs序号(回边:非搜索树上的边),若对于边u->v,有:dfsNo[u] < low[v],说明v通过回边无法到达u之前的节点,那么说明uv为割边,必须是小于,因为若果回边能回到u,且dfsNo[u] == low[v],则说明uv不是割边!
    • 同理,dfsNo[u] <= low[v]可以得出u为割点,之所以有等于号,是因为u是可以被割的
class Solution {public:void Tarjan(vector<vector<int>>& g, int st, vector<int>& parent, vector<int>& low, vector<int>& dfsNo, int no, set<int>& cutPoints, vector<vector<int>>& cutEdges) {int rootChildNum = 0;low[st] = dfsNo[st] = no;for(auto neighbor : g[st]) {// if(parent[neighbor] == st) {//     continue;// }if(-1 != dfsNo[neighbor]) { // st -> neighbor 是一条回边if(parent[st] != neighbor) { // 且不在搜索子树内low[st] = min(low[st], dfsNo[neighbor]); // 更新low[st]为所有能通过回边到达的最小的dfsNo}} else {parent[neighbor] = st;++rootChildNum;++no;// cout << "u/v " << st<<"/"<<neighbor << " " << no << endl;Tarjan(g, neighbor, parent, low, dfsNo, no, cutPoints, cutEdges);low[st] = min(low[st], low[neighbor]); // 更新为所有搜索子树节点中能够通过回边到达的最小的dfsNoif(-1 != parent[st] && dfsNo[st] <= low[neighbor]) {cutPoints.insert(st);}if(dfsNo[st] < low[neighbor]) {cutEdges.emplace_back(vector<int>{st, neighbor});}}}if(parent[st] == -1 && rootChildNum >= 2) {cutPoints.insert(st);}}vector<vector<int>> criticalConnections(int n, vector<vector<int>>& connections) {// build graphvector<vector<int>> g(n);for(auto e : connections) {g[e[0]].push_back(e[1]);g[e[1]].push_back(e[0]);}vector<int> dfsNo(n, -1);vector<int> low(n, -1); // low[i]:i号节点以及其子树中所有的搜索节点仅通过 回边 能够到达的节点的dfs序号(回边:非搜索树上的边)vector<int> parent(n, -1); // 记录搜索树int no = 0;set<int> cutPoints;vector<vector<int>> cutEdges;dfsNo[0] = 0;Tarjan(g, 0, parent, low, dfsNo, no, cutPoints, cutEdges);for(auto i : cutPoints) {cout << i << " ";}cout << "low: ";for(auto i : low) {cout << i << " ";}cout << "\ndfsNo: ";for(auto no : dfsNo) {cout << no << " ";}return cutEdges;}
};

tarjan求连通子集

https://byvoid.com/zhs/blog/scc-tarjan/
当DFN(u)=Low(u)时,以u为根的搜索子树上所有节点是一个强连通分量。

trajan 塔杨算法 求割点,割边相关推荐

  1. tarjan算法求割点割边

    在上一节我们已经知道tarjan算法可以求联通图,在这里我们也运用tarjan的思想求割点与割边,首先我们先来说说割点,那么什么事割点呢,先来看一张图(a),图片来自网络 在(a)图中,我们将A点以及 ...

  2. Tarjan算法求无向图割边割点、最近公共祖先的总结

     无向图tarjan求割边割点.最近公共祖先总结 割点:删除这个点之后整个图变成不连通的两个部分的点 割点集合:在一个无向图中删除该集合中的所有点,能使原图变成互不相连的连通块的点的集合 点连通度 ...

  3. C++算法篇:DFS超详细解析(2)--- tarjan算法求无向图割边

    <<<上一篇 系列文章目录 ①:无向图基本概念 ②:tarjan算法求无向图割边 前言 第一次写算法,讲得肯不透彻,有误还请指教awa 文章目录 系列文章目录 一.回顾 二.tarj ...

  4. Tarjan算法求割点与割边(python3实现)

    from typing import List, Tuple''' Trajan算法求无向图的桥 '''class Tarjan:# 求无向连通图的桥@staticmethoddef getCutti ...

  5. 海亮DAY8 关于Tarjan算法用于割点割边相关感受

    Tarjan 简介 Tarjan算法在求割点,割边,连通分量方面及其高效,在军事,交通,设计等方面有重要作用. 由于Tarjan算法思想并不难懂,在此不放上Tarjan算法的具体介绍. [Usaco2 ...

  6. tarjan算法 割点割边强联通 算法讲解模板 自用整理

    很早就学过tarjan算法(割点割边与强联通)了,但是因为久不用老是忘,也有收藏过几篇不错的博客,但是每次需要时都要翻出那几篇太麻烦了,所以自己开篇记录方便自己的复习.图片和部分文字来源自其他博客,文 ...

  7. tarjan算法求无向图的割点和桥

    tarjan算法求无向图的割点与桥 一篇tarjan算法求割点与桥的完整的解释,写的真的好认真 以下代码来自kuangbin的模板 4.5 图的割点.桥和双连通分支的基本概念 [点连通度与边连通度] ...

  8. Tarjan 算法思想求强连通分量及求割点模板(超详细图解)

    割点定义 在一个无向图中,如果有一个顶点,删除这个顶点及其相关联的边后,图的连通分量增多,就称该点是割点,该点构成的集合就是割点集合.简单来说就是去掉该点后其所在的连通图不再连通,则该点称为割点. 若 ...

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

    今天我主要介绍Tarjan算法在割点割边以及强连通分量中的应用以及缩点技巧 按照老规矩, 先上两道模板题 [模板]强连通分量 [模板]割点(割顶) 割点割边 一, 离散数学中的定义: 割点: 无向连通 ...

  10. c语言tarjan算法,无向图求割点和割边——Tarjan算法

    无向图中求割点集和割边集--Tarjan算法 割点和割边 定义 在一个无向图中,如果删除了某个顶点及与之相连的所有边,产生了一更大连通分量的子图,这样的顶点被称为割点或关节点.对于一个图的所有割点的集 ...

最新文章

  1. 离散数学范式c语言实验报告,离散数学实验报告-利用真值表法求主析取范式及主合取范式的实现...
  2. 计算机科学导论 第4版,计算机科学导论.第4版
  3. 8年,永洪科技凭什么跑出中国BI领军速度?
  4. yum error: rpmdb: BDB0113 Thread/process
  5. 计算机专业学习资料总结(~持续更新中)
  6. CodeForces 1514A Perfectly Imperfect Array
  7. javascript学习系列(8):数组中的splice方法
  8. 知识图谱之语言计算与信息抽取
  9. 6个面的骰子 标上1 2 3 4 5 6 投掷8次 求出现和的概率最大的数 ,就是这8次的和最有可能是多少...
  10. idp 苹果开发账号续费
  11. 孙鑫VC学习笔记:第十九讲 动态链接库
  12. 超详细中文车牌识别开源库EasyPR入门实战(win10_VS2019_opencv34)
  13. 数论入门符号_大o符号快速入门
  14. python地理位置聚类_python实现地理位置的聚类
  15. MySQL DUAL表的作用
  16. 小觅摄像头 VINS-MONO安装
  17. 什么时候要进行大小端字节序的转换?
  18. 三星搁置OLED面板工厂计划可能投资microLED
  19. Linux 命令详解
  20. esxi能直通的显卡型号_七彩虹RTX SUPER祝融(火神)版显卡上手体验

热门文章

  1. 记录阿里云增加二级域名步骤[同三级]
  2. 面经——华为联发科小米兆易创新(2020年秋招嵌入式软件)
  3. Visual Studio Coded的安装以及中文化
  4. python图像坐标系_世界坐标系、相机坐标系和图像坐标系的转换(Python)
  5. 视频采集站-免费视频资源采集工具-免费视频资源网采集
  6. 世界第八大奇迹:复利
  7. 手把手教你禁止访问某个网站
  8. ATSC/DVB/ISDB三大标准比较
  9. 超简单通俗易懂的H桥电机驱动
  10. C语言简单编程之一元二次方程求解