trajan 塔杨算法 求割点,割边
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 塔杨算法 求割点,割边相关推荐
- tarjan算法求割点割边
在上一节我们已经知道tarjan算法可以求联通图,在这里我们也运用tarjan的思想求割点与割边,首先我们先来说说割点,那么什么事割点呢,先来看一张图(a),图片来自网络 在(a)图中,我们将A点以及 ...
- Tarjan算法求无向图割边割点、最近公共祖先的总结
无向图tarjan求割边割点.最近公共祖先总结 割点:删除这个点之后整个图变成不连通的两个部分的点 割点集合:在一个无向图中删除该集合中的所有点,能使原图变成互不相连的连通块的点的集合 点连通度 ...
- C++算法篇:DFS超详细解析(2)--- tarjan算法求无向图割边
<<<上一篇 系列文章目录 ①:无向图基本概念 ②:tarjan算法求无向图割边 前言 第一次写算法,讲得肯不透彻,有误还请指教awa 文章目录 系列文章目录 一.回顾 二.tarj ...
- Tarjan算法求割点与割边(python3实现)
from typing import List, Tuple''' Trajan算法求无向图的桥 '''class Tarjan:# 求无向连通图的桥@staticmethoddef getCutti ...
- 海亮DAY8 关于Tarjan算法用于割点割边相关感受
Tarjan 简介 Tarjan算法在求割点,割边,连通分量方面及其高效,在军事,交通,设计等方面有重要作用. 由于Tarjan算法思想并不难懂,在此不放上Tarjan算法的具体介绍. [Usaco2 ...
- tarjan算法 割点割边强联通 算法讲解模板 自用整理
很早就学过tarjan算法(割点割边与强联通)了,但是因为久不用老是忘,也有收藏过几篇不错的博客,但是每次需要时都要翻出那几篇太麻烦了,所以自己开篇记录方便自己的复习.图片和部分文字来源自其他博客,文 ...
- tarjan算法求无向图的割点和桥
tarjan算法求无向图的割点与桥 一篇tarjan算法求割点与桥的完整的解释,写的真的好认真 以下代码来自kuangbin的模板 4.5 图的割点.桥和双连通分支的基本概念 [点连通度与边连通度] ...
- Tarjan 算法思想求强连通分量及求割点模板(超详细图解)
割点定义 在一个无向图中,如果有一个顶点,删除这个顶点及其相关联的边后,图的连通分量增多,就称该点是割点,该点构成的集合就是割点集合.简单来说就是去掉该点后其所在的连通图不再连通,则该点称为割点. 若 ...
- Tarjan算法超详细讲解(割点割边强连通)
今天我主要介绍Tarjan算法在割点割边以及强连通分量中的应用以及缩点技巧 按照老规矩, 先上两道模板题 [模板]强连通分量 [模板]割点(割顶) 割点割边 一, 离散数学中的定义: 割点: 无向连通 ...
- c语言tarjan算法,无向图求割点和割边——Tarjan算法
无向图中求割点集和割边集--Tarjan算法 割点和割边 定义 在一个无向图中,如果删除了某个顶点及与之相连的所有边,产生了一更大连通分量的子图,这样的顶点被称为割点或关节点.对于一个图的所有割点的集 ...
最新文章
- 离散数学范式c语言实验报告,离散数学实验报告-利用真值表法求主析取范式及主合取范式的实现...
- 计算机科学导论 第4版,计算机科学导论.第4版
- 8年,永洪科技凭什么跑出中国BI领军速度?
- yum error: rpmdb: BDB0113 Thread/process
- 计算机专业学习资料总结(~持续更新中)
- CodeForces 1514A Perfectly Imperfect Array
- javascript学习系列(8):数组中的splice方法
- 知识图谱之语言计算与信息抽取
- 6个面的骰子 标上1 2 3 4 5 6 投掷8次 求出现和的概率最大的数 ,就是这8次的和最有可能是多少...
- idp 苹果开发账号续费
- 孙鑫VC学习笔记:第十九讲 动态链接库
- 超详细中文车牌识别开源库EasyPR入门实战(win10_VS2019_opencv34)
- 数论入门符号_大o符号快速入门
- python地理位置聚类_python实现地理位置的聚类
- MySQL DUAL表的作用
- 小觅摄像头 VINS-MONO安装
- 什么时候要进行大小端字节序的转换?
- 三星搁置OLED面板工厂计划可能投资microLED
- Linux 命令详解
- esxi能直通的显卡型号_七彩虹RTX SUPER祝融(火神)版显卡上手体验