【个人笔记】685. 冗余连接 II 的解释(并查集)

一棵树有n个点和n条边,返回一条能删除的边,使得剩下的图是有 n 个节点的有根树。
解释:
注意不冗余的有根树的特性!**根节点入度为0,其余结点只有一个入度!**所以冗余的两种情况如下:
(1)有一个结点有2个入度(破环其他结点只有一个入度的条件)(可能成环可能不成环)
(2)形成一个每个节点都只有一个入度的环(破环根节点入度为0的条件)(成环)

对于情况(1),找到入度为2的结点(只关注入度)然后返回冗余的边就行了,但是:
1)当不成环时,返回任意一条都行
在这里插入图片描述
2)当成环时,要返回构成环的那条
在这里插入图片描述
所以这里只处理不成环的情况,入度为2时的边记为conflict,并跳过这种可能会导致冗余的边(无论是情况1)的真冗余边还是2)的非冗余边)。把成环的情况合并成到(2)解决。
(所以这里的情况2)出现时,可能造成冗余的边将被跳过)
(a)没去掉真正的冗余边,会出现情况(2)成环
在这里插入图片描述
或者(b)去掉了真正的冗余边,不会出现情况(2)
在这里插入图片描述
对(2),入度不为2的结点需要判定是否成环。如果该结点入度不为2,且属于同一个并查集,说明成环
记录形成有向环的那条边为circle,最后删掉构成环的边就可以了。


由于肯定存在一条冗余边,如果只有circle,那就是circle,如果只有conflict,那就是conflict,如果两个都有,说明是(1)的成环的情况(a)
但是!可能得到circle时是这样!构成环 的临门一脚不一定就是要删的那个,左边那个才是真正要删的!
在这里插入图片描述
所以需要用一个祖先数组ancestors记录“上一个结点”,要找到这个冗余边,就是找 指向edges[conflict][1]的上一个结点
因为只有入度不为2才会更新ancestors,所以ancestors记录的边必然排除了conflict记录的那条。有了ancestors,也不用存入度了,直接:如果ancestors[v]!=v,说明有其他父节点(入度为2)
即:冗余边为
(ancestors[edges[conflict][1]], edges[conflict][1])

class UnionFind{int[] parents;UnionFind(int l){parents = new int[l];Arrays.fill(parents, -1);}int find(int x){if (parents[x] < 0) {return x; // 如果是根节点,则返回}// 路径压缩return parents[x] = find(parents[x]);}void union(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX != rootY) {if (parents[rootX] < parents[rootY]) {  // 负数 <说明rootY下标的结点数更少parents[rootX] += parents[rootY];parents[rootY] = rootX;  // 小树合并到大树}else{parents[rootY] += parents[rootX];parents[rootX] = rootY;  // 小树合并到大树}  // 否则parent[rootX] = parent[rootY],不管}}
}class Solution {public int[] findRedundantDirectedConnection(int[][] edges) {int conflict = -1;  // 冲突(俩父节点)int cycle = -1;     // 环int[] parent = new int[edges.length];for(int i=0; i<edges.length; i++){parent[i] = i;   // 要记录指向环路那个!!}UnionFind uf = new UnionFind(edges.length);for(int i=0; i<edges.length; i++){int u = edges[i][0]-1, v = edges[i][1]-1;if(parent[v]!=v){  // 入度为2conflict = i;   // 冲突,v有俩父结点不同的路径}else{  // 判断是否成环if(uf.find(u)==uf.find(v)){  // 成环cycle = i;}else{  // 正常parent[v] = u;  // u是v的父节点uf.union(u, v);}}}if(conflict==-1){   // 只存在环路return edges[cycle];}if(cycle==-1){  // 只存在冲突return edges[conflict];}// 都有,则附加的边不可能是 [u,v]//(因为[u,v] 已经被记为导致冲突的边,不可能被记为导致环路出现的边),// 因此附加的边是 [parent[v],v]。int[] res = {parent[edges[conflict][1]-1]+1, edges[conflict][1]};return res;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

芯片基础 | Verilog仿真平台及数字逻辑仿真(上)

被测试器件DUT是一个二选一多路器,测试程序(testbench)提供测试激励及验证机制 Testbench使用行为级描述,DUT采用门级描述 下面将给出Testbench的描述、DUT的描述及如何进行混合仿真(行为级+门级) DUT (Device Under Test) module mux2_1(//Port declarations 端口声明outp…

Linux常见配置

linux 常见配置 一、配置固定IP, 主机名映射二、配置环境变量三、vim配置四、ssh配置 一、配置固定IP, 主机名映射 1、修改主机名 hostnamectl set-hostname xxx2、Centos配置固定IP 使用vim编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件&#xff0c;填入下图信息 …

AI伦理之舟:航行于隐私、公正与真实的海域

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

数据编织 VS 数据仓库 VS 数据湖

目录 1. 什么是数据编织?2. 数据编织的工作原理3. 代码示例4. 数据编织的优势5. 应用场景6. 数据编织 vs 数据仓库6.1 数据存储方式6.2 数据更新和实时性6.3 灵活性和可扩展性6.4 查询性能6.5 数据治理和一致性6.6 适用场景6.7 代码示例比较 7. 数据编织 vs 数据湖7.1 数据存储…

Linux-CentOS7忘记密码找回步骤

虚拟机版本 一、进入开机页面&#xff0c;先按上下&#xff08;↑↓&#xff09;键&#xff0c;以免系统自动启动。 二、按“e”键进入编辑页面,找到如下图位置&#xff0c;输入&#xff1a;init/bin/sh 按CTRLX 进入单用户模式。 三、 输入 mount -o remount,rw / 然后按 ent…

ctfshow-web入门-php特性(web127-web131)

目录 1、web127 2、web128 3、web129 4、web130 5、web131 1、web127 代码审计&#xff1a; $ctf_show md5($flag); 将 $flag 变量进行 MD5 哈希运算&#xff0c;并将结果赋值给 $ctf_show。 $url $_SERVER[QUERY_STRING]; 获取当前请求的查询字符串&#xff08;que…

js继承之构造函数继承

最近在看js红宝书&#xff0c;学到了继承这一章节&#xff0c;看到了下图这段代码根据自己理解不明白为什么两次实例的colors值不一样 又是自己画图又是查找资料看别人如何理解的&#xff0c;今天才按自己的理解搞明白为啥。可能我的理解也是有偏差错误的&#xff0c;希望佬可以…

爬虫(一)——爬取快手无水印视频

前言 最近对爬虫比较感兴趣&#xff0c;于是浅浅学习了一些关于爬虫的知识。爬虫可以实现很多功能&#xff0c;非常有意思&#xff0c;在这里也分享给大家。由于爬虫能实现的功能太多&#xff0c;而且具体的实现方式也有所不同&#xff0c;所以这里开辟了一个新的系列——爬虫…

“卓越级”!火山引擎边缘云持续推动行业标准与生态建设,获多项权威认可

7月18日&#xff0c;由中国通信标准化协会主办的第四届云边协同大会暨首届分布式算力论坛在北京成功召开&#xff0c;大会聚焦算力多元泛在化发展趋势及“人工智能”前沿探索&#xff0c;围绕行业技术标准、行业前沿实践、行业发展规划等主题方向发布了诸多成果、标杆、计划等。…

ts报错|| Warning: Failed prop type:xxx but its value is `undefined`

场景 分析 可选链(?.) 可选链操作符允许你安全地访问对象的嵌套属性&#xff0c;即使其中间的一个属性可能不存在也不会抛出错误。如果globalAlertDetail是一个对象并且它有isShow属性&#xff0c;那么globalAlertDetail?.isShow会返回该属性的值。如果globalAlertDetail不…

Python机器学习、深度学习技术提升气象、海洋、水文领域实践技术

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…

如何使用AI辅助开发

自从踏上AI辅助开发这条不归路&#xff0c;就回不了头&#xff0c;只能勇往直前&#xff01;就算是简单的智能提示、补充代码、自动多语言补全等功能&#xff0c;就已经让你离不开它&#xff0c;更何况强大的代码生成成功。如果还没有开始使用AI辅助开发&#xff0c;那么赶快为…

C++复习的长文指南

C复习的长文指南 一、入门语法知识1.预备1.1 main函数1.2 注释1.3 变量1.3 常量1.4 关键字1.5 标识符明明规则 2. 数据类型2.1 整型2.1.1 sizeof关键字 2.2 实型&#xff08;浮点型&#xff09;2.3 字符型2.4 转义字符2.5 字符串型2.6 布尔类型bool2.7 数据的输入 3. 运算符3.1…

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678

函数返回右值的一点学习研究

https://zhuanlan.zhihu.com/p/511371573?utm_mediumsocial&utm_oi939219201949429760 下面情况下不会调用&#xff1a; DPoint3d fun1() {return DPoint3d{1,2,3}; // 默认构造 }int main() {DPoint3d&& a fun1();a.y 20;int i 0;i; } 下面情况下&#xff0c…

Stable Diffusion:质量高画风清新细节丰富的二次元大模型二次元插图

今天和大家分享一个基于Pony模型训练的二次元模型&#xff1a;二次元插图。关于该模型有4个不同的分支版本。 1.5版本&#xff1a;loar模型&#xff0c;推荐底模型niji-动漫二次元4.5。 xl版本&#xff1a;SDXL模型版本 mix版本&#xff1a;光影减弱&#xff0c;减少SDXL版本…

[职场] MARKETINGSPECIALIST是什么 #笔记#微信#知识分享

MARKETINGSPECIALIST是什么 MARKETINGSPECIALIST&#xff0c;即市场营销专员&#xff0c;他们需要具备一定的专业知识和技能&#xff0c;以适应快速变化的市场环境。接下来&#xff0c;我们将详细探讨这个职位的工作内容、必备技能以及发展前景。 一、MARKETINGSPECIALIST是什么…

Postfix搭建安装教程:解决配置难题攻略!

Postfix搭建安装教程的详解&#xff01;如何优化邮件服务器性能&#xff1f; Postfix是一款广泛使用的电子邮件服务器软件&#xff0c;以其高效、可靠和安全性而闻名。许多企业和个人站点都选择Postfix来处理邮件传输任务。AokSend将提供一个详尽的Postfix搭建安装教程。 Pos…

我在高职教STM32——串口通信(1)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正是如此&#xff0c;才有了借助头条平台寻求认同感和成就感…

水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景

目录 引言 一、智慧水利的核心要素 1. 物联网技术 2. 大数据与云计算 3. 人工智能与机器学习 4. 移动互联网与GIS技术 5. 标准化与信息安全 二、智慧水利的优势 1. 提高水资源利用效率 2. 增强水灾害防御能力 3. 提升水环境治理水平 4. 促进水利服务智能化 三、展望…