代码随想录算法训练营day70 | 108. 冗余连接、109. 冗余连接II

本次题目都来自卡码网

108. 冗余连接

无向图,返回一条可以删去的边,使得结果图是一个有着N个节点的树(即:只有一个根节点)。

  • 从前向后遍历每一条边(因为优先让前面的边连上),边的两个节点如果不在同一个集合,就加入集合(即:同一个根节点)。
  • 如果边的两个节点已经出现在同一个集合里,说明着边的两个节点已经连在一起了,再加入这条边一定就出现环了。
class UnionFind:def __init__(self, n):self.n = nself.father = [0] * (n + 1)for i in range(n + 1):self.father[i] = idef find(self, u):if u == self.father[u]:return uelse:self.father[u] = self.find(self.father[u])return self.father[u]def join(self, u, v):u = self.find(u)v = self.find(v)if u == v:returnelse:self.father[u] = vdef is_same(self, u, v):u = self.find(u)v = self.find(v)return u == vif __name__ == '__main__':n = int(input())UnionFind = UnionFind(n)for i in range(n):s, t = map(int, input().strip().split())if UnionFind.is_same(s, t):print(str(s) + " " + str(t))exit()else:UnionFind.join(s, t)

109. 冗余连接II

1、先考虑节点有两个入度的情况,其中必定有一个是冗余的

2、如果不存在1的情况,则考虑环的情况

class UnionFind:def __init__(self, n):self.n = nself.father = [0] * (n + 1)for i in range(n + 1):self.father[i] = idef find(self, u):if u == self.father[u]:return uelse:self.father[u] = self.find(self.father[u])return self.father[u]def join(self, u, v):u = self.find(u)v = self.find(v)if u == v:returnelse:self.father[u] = vdef is_same(self, u, v):u = self.find(u)v = self.find(v)return u == v# 在有向图里找到删除的那条边,使其变成树
def getRemoveEdge(edges, n):union_find = UnionFind(n)  # 初始化并查集for i in range(union_find.n):  # 遍历所有的边if union_find.is_same(edges[i][0], edges[i][1]):  # 构成有向环了,就是要删除的边print(str(edges[i][0]) + " " + str(edges[i][1]))else:union_find.join(edges[i][0], edges[i][1])# 删一条边之后判断是不是树
def isTreeAfterRemoveEdge(edges, deleteEdge, n):union_find = UnionFind(n)  # 初始化并查集for i in range(union_find.n):if i == deleteEdge:continueif union_find.is_same(edges[i][0], edges[i][1]):  # 构成有向环了,一定不是树return Falseelse:union_find.join(edges[i][0], edges[i][1])return Trueif __name__ == '__main__':n = int(input())edges = []inDegree = [0] * (n + 1)  # 记录节点入度for i in range(n):s, t = map(int, input().strip().split())inDegree[t] += 1edges.append((s, t))inDegree2 = []  # 记录入度为2的边(如果有的话就两条边)# 找入度为2的节点所对应的边,注意要倒序,因为优先删除最后出现的一条边for i in range(n - 1, -1, -1):if inDegree[edges[i][1]] == 2:inDegree2.append(i)if len(inDegree2) > 0:# 放在inDegree2里的边已经按照倒叙放的,所以这里就优先删inDegree2[0]这条边if isTreeAfterRemoveEdge(edges, inDegree2[0], n):print(str(edges[inDegree2[0]][0]) + " " + str(edges[inDegree2[0]][1]))else:print(str(edges[inDegree2[1]][0]) + " " + str(edges[inDegree2[1]][1]))exit()# 处理情况三# 明确没有入度为2的情况,那么一定有有向环,找到构成环的边返回就可以了getRemoveEdge(edges, n)

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

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

相关文章

ubuntu 安装并启用 samba

环境:ubuntu server 24.04 步骤如下: sudo apt update sudo apt install samba修改配置文件: sudo vi /etc/samba/smb.conf新增内容: [username]path /home/[username]available yesvalid users [username]read only nobrow…

[Information Sciences 2023]用于假新闻检测的相似性感知多模态提示学习

推荐的一个视频:p-tuning P-tunning直接使用连续空间搜索 做法就是直接将在自然语言中存在的词直接替换成可以直接训练的输入向量。本身的Pretrained LLMs 可以Fine-Tuning也可以不做。 这篇论文也解释了为什么很少在其他领域结合知识图谱的原因:就是因…

Android SQLite 数据库存学习与总结

Android 系统内置了一个名为 SQLite 数据库。那么 SQLite 是一种什么样的数据库,它有那些特点,应该怎么操作它?下面,让我们就来认识一下它吧。 1、概念: SQLite 是一种轻量级的关系型数据库,它不仅支持标准…

elementPlus自定义el-select下拉样式

如何在f12元素选择器上找到下拉div呢? 给el-select添加 :popper-append-to-body"false" 即可,这样就可以将下拉框添加到body元素中去,否则当我们失去焦点,下拉就消失了,在元素中找不到el-select。剩下就可以…

怎么压缩图片大小?6种无需牺牲质量的图片压缩方法

经常处理图片的小伙伴都知道,高质量的图片往往会占据电脑大量的存储空间,导致图片传输及存储的不便。因此,掌握如何压缩图片大小变得尤为重要。本文将详细介绍图片压缩的几种方法,帮助你高效地减小图片文件大小,让你的…

【.Net】Web项目部署腾讯云

文章目录 总述前置准备docker-compose部署普通部署 参考 总述 前置准备 云服务添加端口 另有linux本身防火墙请参考: 【Linux】防火墙命令 需安装.Net SDK和Asp .Net Runtime 注意: 1、sdk也要不只是runtime 2、是Asp .Net Runtime不是.Net Runtime …

搜索型数据库的技术发展历程与趋势前瞻

概述 随着数字科技的飞速发展和信息量的爆炸性增长,搜索引擎已成为我们获取信息的首选途径之一,典型的代表厂商如 Google。然而,随着用户需求的不断演变,传统的搜索技术已经无法满足人们对信息的实时性、个性化和多样性的需求。 …

华为OD机试(D卷+C卷+A卷+B卷)2024真题目录(全、新、准)

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

注意!!2024《信息系统监理师》易混淆知识点来了,赶紧收藏

宝子们,在复习软考信息系统监理师中,是不是觉得有很多知识点含义比较相近,很多友友刚看的时候估计会像我一样迷迷糊糊的,作为一个软考老鸟,在这里给大家整理了信息系统监理师学习过程中易混淆的知识点,大家…

Redux 使用及基本原理

什么是Redux Redux 是用于js应用的状态管理库,通常和React一起用。帮助开发者管理应用中各个组件之间的状态,使得状态的变化变得更加可预测和易于调试。 Redu也可以不和React组合使用。(通常一起使用) Redux 三大原则 单一数据源…

武汉星起航:无锡跨境电商加速“出海”,物流升级助品牌全球布局

随着全球化的不断深入,跨境电商作为数字外贸的新业态,正逐渐成为无锡企业拓展海外市场的重要渠道。武汉星起航关注到,近年来,无锡市通过积极推进国际物流枢纽建设,完善海外仓布局,以及各特色产业带的积极参…

2024 年江西省研究生数学建模竞赛题目 A题交通信号灯管理--完整思路、代码结果分享(仅供学习)

交通信号灯是指挥车辆通行的重要标志,由红灯、绿灯、 黄灯组成。红灯停、绿灯行,而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一般情况下,十字路口有东西向和南北向 4 个方向的车…

手机歌曲怎么转换成mp3格式,手机电脑都能轻松搞定

不同的手机和音乐应用可能支持不同的音频格式,而MP3作为一种广泛兼容的音频格式,因其体积小、音质相对较好的特点,至今仍被广泛使用。 如果您想将手机中的歌曲转换成MP3格式,以便于在更多设备上播放或节省存储空间,本…

C# 警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset”

警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset” C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.CSharp.CurrentVersion.targets(129,9): warning MSB3884: 无法找到规则集文件“MinimumRe…

竞赛选题 python的搜索引擎系统设计与实现

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python的搜索引擎系统设计与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:5分创新点:3分 该项目较为新颖&#xff…

武汉星起航:成功挂牌上股交,引领跨境电商行业进入全新发展阶段

2023年10月30日,武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示,这一里程碑式的事件标志着武汉星起航正式登陆资本市场,开启了公司发展的新篇章。作为亚马逊跨境电商领域的领军企业之一,武汉星起航此次挂牌不仅是…

文件操作详解(C语言)

1.为什么要用到文件?怎样数据才能持久化? 保存在内存中的数不安全(一次断电,忘记保存,不用了还给系统) 持久化:保存在硬盘上(放在文件中) 什么是文件?文件…

Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件

章节内容 上一节完成: HDFS的简介内容HDFS基础原理HDFS读文件流程HDFS写文件流程 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次,但是没留下…

如何保护应用?可快速部署的WAF服务器分享

Web应用攻击是安全事件和数据泄露的主要原因。相关统计表明,超过四分之三的网络犯罪直指应用及其漏洞。为保护数量日益增长的应用安全,Web应用防火墙(WAF)因此而生。本文则聚焦于WAF服务器,了解它的性能与具体的实践应用。   新加坡网络安全…