leetcode 1489. 找到最小生成树里的关键边和伪关键边(并查集)

给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1 ,同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, weighti] 表示在 fromi 和 toi 节点之间有一条带权无向边。最小生成树 (MST) 是给定图中边的一个子集,它连接了所有节点且没有环,而且这些边的权值和最小。

请你找到给定图中最小生成树的所有关键边和伪关键边。如果从图中删去某条边,会导致最小生成树的权值和增加,那么我们就说它是一条关键边。伪关键边则是可能会出现在某些最小生成树中但不会出现在所有最小生成树中的边。

请注意,你可以分别以任意顺序返回关键边的下标和伪关键边的下标。

示例 1:

输入:n = 5, edges = [[0,1,1],[1,2,1],[2,3,2],[0,3,2],[0,4,3],[3,4,3],[1,4,6]]
输出:[[0,1],[2,3,4,5]]
解释:上图描述了给定图。
下图是所有的最小生成树。

代码

class Solution {int[] fa;public void  init(){for(int i=0;i<fa.length;i++)fa[i]=i;}public int  find(int x){if(x!=fa[x])fa[x]=find(fa[x]);return fa[x];}public void   union(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[x]=y;}public List<List<Integer>> findCriticalAndPseudoCriticalEdges(int n, int[][] edges) {fa=new int[n];init();int tar=n;int min=0;int[][] edge=new int[edges.length][4];for(int i=0;i<edges.length;i++){for(int j=0;j<3;j++)edge[i][j]=edges[i][j];edge[i][3]=i;}Arrays.sort(edge,(o1, o2) -> o1[2]-o2[2]);for(int i=0;i<edge.length;i++)//计算最小生成树的权值{if(find(edge[i][0])==find(edge[i][1]))continue;union(edge[i][0],edge[i][1]);min+=edge[i][2];}List<List<Integer>> res=new ArrayList<>();res.add(new ArrayList<>());res.add(new ArrayList<>());for(int i=0;i<edge.length;i++)//遍历所有边{init();tar=n;int var=0;for(int j=0;j<edge.length;j++)//不加入当前边的情况下,计算最小生成树{if(i==j||find(edge[j][0])==find(edge[j][1])) continue;union(edge[j][0],edge[j][1]); tar--;var+=edge[j][2];}if(tar!=1||var>min)//如果生成的最小生成树权重更大,或者无法生成最小生成树,消去的边则为关键边{res.get(0).add(edge[i][3]);continue;}init();var=edge[i][2];union(edge[i][0],edge[i][1]);//用当前边为开始构造生成树for(int j=0;j<edge.length;j++){if(i==j||find(edge[j][0])==find(edge[j][1])) continue;union(edge[j][0],edge[j][1]); var+=edge[j][2];}if(var==min) res.get(1).add(edge[i][3]);//如果当前边构造而成的生成树也等于最小权值,则是伪关键边}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带彩色字体的man pages(debian centos)

1234567891011121314151617181920212223242526272829303132333435363738我的博客已迁移到xdoujiang.com请去那边和我交流简介most is a paging program that displays,one windowful at a time,the contents of a file on a terminal. It pauses after each windowful and prin…

提取json对象中的数据,转化为数组

var xx1 ["乐谱中的调号为&#xff08; &#xff09;调", "写出a自然小调音阶。", "以G为冠音&#xff0c;构写增四、减五音程。", "调式分析。", "将下列乐谱移为C大调。", "正确组合以下乐谱。", "以下…

java 同步块的锁是什么,java – 同步块 – 锁定多个对象

我添加了另一个答案&#xff0c;因为我还没有添加评论给其他人的帖子。>事实上&#xff0c;同步是用于代码&#xff0c;而不是对象或数据。在同步块中用作参数的对象引用表示锁定。所以如果你有如下代码&#xff1a;class Player {// Same instance shared for all players.…

大数据对社交媒体的影响_数据如何影响媒体,广告和娱乐职业

大数据对社交媒体的影响In advance of our upcoming event — Data Science Salon: Applying AI and ML to Media, Advertising, and Entertainment, we asked our speakers, who are some of nation’s leading data scientists in the media, advertising, and entertainment…

Go-项目结构和代码组织

简介 做大量的输入&#xff0c;通过对比、借鉴&#xff0c;加上自己的经验&#xff0c;产出一个尽可能优的方案。 开源界优秀项目的结构示例 因为最新的 Go 版本已经使用 module 作为版本依赖&#xff0c;所以&#xff0c;所有项目的 vendor 我都忽略&#xff0c;建议直接使用 …

iref streams_如何利用Neo4j Streams并建立即时数据仓库

iref streamsby Andrea Santurbano通过安德里亚桑图尔巴诺(Andrea Santurbano) 如何利用Neo4j Streams并建立即时数据仓库 (How to leverage Neo4j Streams and build a just-in-time data warehouse) In this article, we’ll show how to create a Just-In-Time Data Wareho…

Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解

1. Match函数使用指定的正则表达式函数对字符串惊醒查找&#xff0c;并以数组形式返回符合要求的字符串原型&#xff1a;stringObj.match(regExp)参数&#xff1a;stringObj 必选项&#xff0c;需要去进行匹配的字符串RegExp 必选项&#xff0c;指定的正则表达式返回值&#xf…

Zabbix 3.0 从入门到精通(zabbix使用详解)

第1章 zabbix监控 1.1 为什么要监控 在需要的时刻&#xff0c;提前提醒我们服务器出问题了 当出问题之后&#xff0c;可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性&#xff08;也称为可用性&#xff0c;英文描述为HA&#xff0c;High Avail…

python 装饰器装饰类_5分钟的Python装饰器指南

python 装饰器装饰类重点 (Top highlight)There’s no doubt that Python decorators are one of the more advanced and tougher-to-understand programming concepts. This doesn’t mean you should avoid learning them — as you encounter them in production code soone…

php中颜色的索引值,计算PHP中两种颜色之间的平均颜色,使用索引号作为参考值...

我们假设为了讨论的目的,每个颜色都有一个“值”.那么,你想要的就足够简单&#xff1a;$index 0.2;$val1 get_value_of_color($color1);$val2 get_value_of_color($color2);$newval $val1 * $index $val2 * (1 - $index);$newcolor get_color_from_value($newval);所以,很…

leetcode 989. 数组形式的整数加法

对于非负整数 X 而言&#xff0c;X 的数组形式是每位数字按从左到右的顺序形成的数组。例如&#xff0c;如果 X 1231&#xff0c;那么其数组形式为 [1,2,3,1]。 给定非负整数 X 的数组形式 A&#xff0c;返回整数 XK 的数组形式。 示例 1&#xff1a; 输入&#xff1a;A […

您需要了解的WordPress漏洞以及如何修复它们

by Joel S. Syder乔尔赛德(Joel S.Syder) 您需要了解的WordPress漏洞以及如何修复它们 (WordPress vulnerabilities you need to know about — and how to fix them) WordPress is an incredibly useful and versatile platform for all kinds of blogging. It’s become ver…

Maven基础。

---恢复内容开始--- Maven&#xff1a; 1、概念。 * maven 是一个项目管理工具。 * maven的作用。 1、jar包。依赖管理。将jar包放在jar包仓库&#xff08;pom.xml)&#xff0c;不需要每个项目都添加jar包。 2、测试。 3、项目发布。 2、使用。 * 下载解压即可。 * 环境变量配置…

Dinosaur Run - Dinosaur world Games

转载于:https://www.cnblogs.com/hotmanapp/p/7092669.html

机器学习实际应用_机器学习的实际好处是什么?

机器学习实际应用Some of my previous introductory posts to machine learning and data science were a bit technical. However, my purpose of this post is to explain some of the practical use-cases of ML solely from a non-technical savvy layman’s perspective w…

Javascript的setTimeOut()和setInterval()的定时器用法

Javascript用来处理延时和定时任务的setTimeOut和setInterval函数应用非常广泛&#xff0c;它们都用来处理延时和定时任务&#xff0c;比如打开网页一段时间后弹出一个登录框&#xff0c;页面每隔一段时间发送异步请求获取最新数据等等。但它们的应用是有区别的。 setTimeout()…

php随机生成车牌号,生成汽车牌照

用户随机50选1。好的车牌用户选不到。我目前的做法是这样的。所有车牌入库。别人选了状态就修改为1。下面是入库程序&#xff0c;想跟大家讨论一下&#xff0c;有没有更好的方式。use Illuminate\Database\Seeder;class LicensePlatesTableSeeder extends Seeder{public functi…

Go_ go mod 命令解决墙的问题

简介 由于众所周知的原因&#xff0c;在下载一些库的时候会下载不了&#xff0c;比如 golang.org/x/... 相关的库。为此&#xff0c;网上出现了很多解决方案。 从 Go1.11 开始&#xff0c;Go 引入了 module&#xff0c;对包进行管理&#xff0c;通过 go mod 命令来进行相关操作…

leetcode 1319. 连通网络的操作次数(并查集)

用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。线缆用 connections 表示&#xff0c;其中 connections[i] [a, b] 连接了计算机 a 和 b。 网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。 给你这个…

MySQL中choose标签的用法

先给大家来个SQL语句&#xff1a; choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中 的 choose 很类似。 <select id"getMemberInfo" resultType"java.util.Map" parameterType"java.util.Map" > SELECT …