LeetCode #1192. Critical Connections in a Network

Tarjan算法求割边——leetcode1192 本文学习自 Tarjan算法:求解图的割点与桥(割边),以leetcode1192题为练习讲述割边的求法。 一、割边的定义 在无向图中,若去掉某条边会导致图中的连通分量增加,则这条边称为割边(或称为桥)。 而连通分量,就是一个图的某个子图,该子图中的所有顶点互相连通(任意两个顶点之间都存在可以互相到达的路径),而这些顶点都与子图之外的其他顶点不连通。 二、Tarjan算法原理 ... 阅读详情

题目描述:

There are n servers numbered from 0 to n-1 connected by undirected server-to-server connections forming a network where connections[i] = [a, b] represents a connection between servers a and b. Any server can reach any other server directly or indirectly through the network.

A critical connection is a connection that, if removed, will make some server unable to reach some other server.

Return all critical connections in the network in any order.

Example 1:

Input: n = 4, connections = [[0,1],[1,2],[2,0],[1,3]]
Output: [[1,3]]
Explanation: [[3,1]] is also accepted.

Constraints:

  • 1 <= n <= 10^5
  • n-1 <= connections.length <= 10^5
  • connections[i][0] != connections[i][1]
  • There are no repeated connections.
class Solution {
public:
    vector<vector<int>> criticalConnections(int n, vector<vector<int>>& connections) {
        // u是强连通分量的根的条件:u或u的子树不存在路径可以返回祖先
        // 也就是low[u]<dfsnum[u]&&low[v]<dfsnum[u],v是u的子节点
        num=0; // 节点访问编号
        dfsnum=vector<int>(n+1,0); // dfsnum[i]表示访问该点的时间或编号,值越小表示越早访问到
        low=vector<int>(n+1,0); // low[i]表示i或i的子树可以访问到的节点编号
        visited=vector<bool>(n+1,false);
        parent=vector<int>(n+1,-1); 
        
        for(auto connection:connections)
        {
            graph[connection[0]].push_back(connection[1]);
            graph[connection[1]].push_back(connection[0]);
        }
        vector<vector<int>> result;
        for(int i=1;i<=n;i++)
        {
            if(!visited[i]) tarjan(i,result);
        }
        return result;
    }
    
    void tarjan(int u, vector<vector<int>>& result)
    {
        visited[u]=true;
        num++;
        dfsnum[u]=low[u]=num;
        for(int v: graph[u]) //访问所有出边 
        {
            if(!visited[v]) //不曾访问过,可以认为是子节点了
            {
                parent[v]=u;
                tarjan(v,result); // 递归访问子节点
                low[u]=min(low[u],low[v]);
                if(low[v]>dfsnum[u]) // 发现桥
                    result.push_back({min(u,v),max(u,v)});   
            }
            else if(v!=parent[u]) // 注意判断是否存在回向边,排除重边
                low[u]=min(low[u],dfsnum[v]);
        }
    }
    
private:
    int num;
    vector<int> dfsnum;
    vector<int> low;
    vector<bool> visited;
    vector<int> parent;
    unordered_map<int,vector<int>> graph;
};

 

OpenClaw 企业级自动化系统架构设计与实现 本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。 阅读详情

相关推荐

思科—OSPF多区域配置实验

实验目的:配置OSPF多区域,使得不同网段的PC互相ping通。 网络拓扑如下: R0的配置 Router>en Router#conf t Router(config)#int g0/1 Router(config-if)#ip add 192.168.1.1 255.255.255.0 Router(config-if)#no shut Router(config-if)#exit Router(config)#int g0/0 Router(config-if)#ip add 192.168.

m0_46237205的博客 1万+

1192. Critical Connections in a Network

There arenservers numbered from0ton-1connected byundirected server-to-serverconnectionsforming a network whereconnections[i] = [a, b]represents a connection between serversaandb. Any ser...

Do not mess it up 1810

从零到一:基于DESeq2的转录组差异表达分析实战指南

本文详细介绍了基于DESeq2的转录组差异表达分析实战指南,涵盖数据准备、标准化处理、差异分析及结果解读等关键步骤。DESeq2凭借其稳定性和对低表达基因的友好处理,成为转录组数据分析的首选工具。文章还提供了常见问题排查和优化建议,帮助研究者高效完成从分析到发表的完整流程。

weixin_26759093的博客 270

Critical Connections in a Network

There arenservers numbered from0ton-1connected byundirected server-to-serverconnectionsforming a network whereconnections[i] = [a, b]represents a connection between serversaandb. Any ser...

leetcode 解题思路 764

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 182

安检机图像处理避坑指南:从条纹校正到物质分类,那些论文里没写的工程细节

本文深入探讨了双能X射线安检机图像处理中的关键工程实践,从条纹校正到物质分类,揭示了论文中未提及的实用技巧。针对探测器校正、物质分类模糊、伪彩色系统设计等核心问题,提供了动态参数更新、空间上下文分析和自适应色彩映射等解决方案,助力提升安检系统的准确性和鲁棒性。

weixin_30325487的博客 887

Critical Connections in a Network ( Tarjan Algorithm )

寻找一个图中所有的关键边,关键边的定义是:如果这个边去除,那么所有节点就不能都到达了(不连通)。譬如在上图中,[1, 3]这条边是关键边。 可以使用Tarjan Algorithm来解决这个这个问题:https://www.youtube.com/watch?v=thLQYBlz2DM 基本的思路是,使用两个数组: dic 和 low来分别存储 节点访问的顺序 和 当前...

whyymlm的博客 487

CATIA二次开发实战:我用VBA写了个BOM表自动导出工具,效率提升80%

本文详细介绍了如何利用VBA进行CATIA二次开发,构建BOM表自动导出工具的全过程。通过智能解析算法、异常处理机制和性能优化技巧,该工具将BOM表生成时间从2.5小时缩短至8分钟,效率提升80%。文章还探讨了与PDM系统集成和定制化报告生成等扩展应用,为机械设计工程师提供了实用的自动化解决方案。

weixin_33709590的博客 552

Leetcode 1192:查找集群内的「关键连接」(超详细的解法!!!)

力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群,其中连接 connections 是无向的。 从形式上讲,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。 「关键连接」是在该集群中的重要连接,也就是说,假如我...

coordinate的博客 2445

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 640

在STM32上运行小波变换及神经网络算法——(一)单片机中小波算法编写

在单片机上实现离散小波变换的C代码,通过确定信号长度、小波分解层数、小波基名称后进行编写,并改写成了方便调用的结构体格式。

weixin_45400202的博客 986

LeetCode 1192. 查找集群内的「关键连接」Tarjan找桥

题意:给n个点构成的图,定义关键连接为去掉后图就变得不连通的边,求出所有这样的边 思路:tarjan找桥裸题(居然还是困难难度)。当某个点i的low值大于其父亲节点dfn值时,表示从i往上推无法推到其父亲,即路径中不存在环,故其与父亲之间的边一定不能删去,否则图就变得不连通,换言之这条边就是桥。用tarjan处理过后找出所有符合条件的边即可。 好久没碰Java,不知道是LeetCode的锅还是Ja...

qq_42397248的博客 733

IPCP(IP Control Protocol,IP控制协议)

IPCP(IP Control Protocol,IP控制协议)

天赐好车的博客 754

LeetCode题解(1192):查找集群内的“关键连接”(Python)

题目:原题链接(困难) 标签:深度优先搜索、Tarjan算法 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N+E)O(N+E)O(N+E) O(N+E)O(N+E)O(N+E) 916ms (40.22%) Ans 2 (Python) Ans 3 (Python) 解法一: import collections from typing import List class Solution: def criticalConne

长行 612

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【算法笔记】Tarjan算法 【LeetCode 1192】

题目来源 LeetCode 1192 数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群,其中连接 connections 是无向的。从形式上讲,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。 「关键连接」 是在该集群中的重要连接,也就是说,假如我们将它移除,便会导致某些服务器无法访问其他服务器。 请你以任意顺序返回该集

Grafika的博客 526

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【Leetcode】1192. Critical Connections in a Network

题目地址: https://leetcode.com/problems/critical-connections-in-a-network/ 给定一个nnn阶无向简单图GGG,求其桥。一条边(u,v)(u,v)(u,v)是桥,当且仅当图中去掉它之后,连通块数量会发生变化。 不妨设GGG是连通的。对于一条边(u,v)(u,v)(u,v),我们考虑去掉它会有什么情形。如果图中任意两个顶点都存在一条不经过其的路径,那么显然去掉它之后图仍然连通,也就是连通块数量不会改变;否则的话,如果存在两个点xxx和yyy之间的

数学、算法爱好者的博客 581

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode-Python-1192. 查找集群内的「关键连接」

力扣数据中心有n台服务器,分别按从0到n-1的方式进行了编号。 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群,其中连接connections是无向的。 从形式上讲,connections[i] = [a, b]表示服务器a和b之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。 「关键连接」是在该集群中的重要连接,也就是说,...

Keep Coding 783

每天一道leetcode:1192. 查找集群内的关键连接(图论&困难&tarjan算法)

今日份题目:每天一道leetcode:1192. 查找集群内的关键连接(图论&困难&tarjan算法)

qq_63349644的博客 1263

leetcode:1192. 查找集群内的关键连接【tarjan模版 + 找割边】

tarjan裸题找割边

小楼一夜听春雨 342

图论8(Leetcode1192.查找集群内的关键连接)

tarjan:(这是我写的一版 但是为什么超时啊。

小番茄没有酱的csdn 174

LeetCode——1192. 查找集群内的「关键连接」

力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群,其中连接 connections 是无向的。 从形式上讲,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。 「关键连接」是在该集群中的重要连接,也就是说,假如我们将它移除,便会导致某些服务器无法访问其他服务器。 请你以任意顺序返回该集群内的所有 「关键连接」。 来源:力

绝尘 1074

leetcode 1192. Critical Connections in a Network 与 CF1000E. We Need More Bosses

There arenservers numbered from0ton-1connected byundirected server-to-serverconnectionsforming a network whereconnections[i] = [a, b]represents a connection between serversaandb. Any ser...

yaoct的博客 2543

leetcode 1192. Critical Connections in a Network

There aren servers numbered from0ton-1 connected byundirected server-to-server connections forming a network where connections[i] = [a, b]represents a connection between servers aand b. Any ser...

cmy203的博客 912

[leetcode] 1192. Critical Connections in a Network

class Solution { private int time = 0; public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) { List<List<Integer>> ...

Belle_Chou的博客 479

[leetcode] 1192 critical-connections-in-a-network

https://leetcode.com/contest/weekly-contest-154/problems/critical-connections-in-a-network/ class Solution { public: vector<vector<int>> res; int index = 0; // 访问序号 ...

ayzejx8547408的博客 435

1192. Critical Connections in a Network刷题笔记

参考这个题解,用的dfs import collections class Solution: def criticalConnections(self, n: int, connections: List[List[int]]) -> List[List[int]]: def makeGraph(coonections): graph = collections.defaultdict(list) for conn in con

weixin_44737922的博客 206
上一篇: LeetCode #978. Longest Turbulent Subarray
下一篇: LeetCode #490. The Maze
LawFile
博客等级 码龄10年 5粉丝 627原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值