代码随想录算法训练营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,一经查实,立即删除!

相关文章

【2024LLM应用-数据预处理】之如何从PDF,PPT等非结构化数据提取有效信息(结构化数据JSON)?

🥰大家知道吗,之前在给AI大模型"喂数据"的时候,我们往往需要把非结构化数据(比如PDF、PPT、Excel等)自己手动转成结构化的格式,这可真是太累人儿了。🥵 幸好现在有了Unstructured这个神级库,它内置的数据提取函数可以帮我们快速高效地完成这个…

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。剩下就可以…

洛谷 AT_abc169_d [ABC169D] Div Game 题解

思路 想要让操作次数最多, z z z 就要尽可能小。 由于 z z z 是 N N N 的因数,所以 p p p 就是 N N N 的质因数。 设 N N N 的质因数中有 x x x 个 p p p,则这个 p p p 能执行 y y y 此操作,并且 y y y 满足 ∑ i …

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

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

使用多智能体辩论微调大型语言模型

F INE - TUNING L ARGE L ANGUAGE M ODELS WITH MULTI - AGENT D EBATE S UPERVISION DebateGPT: Fine-tuning Large Language M

探究Yarn依赖之源:精通why命令的秘籍

🕵️‍♂️ 探究Yarn依赖之源:精通why命令的秘籍 在现代JavaScript项目开发中,依赖管理是至关重要的一环。Yarn作为领先的包管理器之一,提供了强大的工具来帮助开发者理解项目依赖的起源和结构。yarn why命令就是这样一个工具&am…

IT专业入门,高考假期预习指南-致有志踏入IT领域的高考少年们

IT专业入门,高考假期预习指南 七月来临,各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束,而是新旅程的开始。对于有志于踏入IT领域的高考少年们,这个假期是开启探索IT世界的绝佳时机。 计算机专业是一个综合性非常强…

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

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

ConcurrentHashMap并发哈希表的设计与实现

ConcurrentHashMap并发哈希表的设计与实现 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 介绍ConcurrentHashMap 1. ConcurrentHashMap的概述 ConcurrentH…

一个计算密集小程序在不同CPU下的表现

本文比较了几款CPU对同一测试程序的比较结果,用的是Oracle公有云OCI上的计算实例,均分配的1 OCPU,内存用的默认值,不过内存对此测试程序运行结果不重要。 本文只列结果,不做任何评价。下表中,最后一列为测…

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

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

Qt应用程序中通过上下左右键选择控件,像win桌面图标选择一样

在Qt应用程序中模拟Windows桌面图标的选择行为,即通过上下左右键来移动选择控件,你需要管理一个焦点系统,该系统能够跟踪哪个控件当前被选中,并根据用户的键盘输入来更新这个状态。以下是一个简化的步骤说明和示例代码&#xff0c…

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

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

Maven_构建和pom.xml

概述 Maven是为Java项目提供构建和依赖管理支持的工具 构建环节 清理clean 删除上一次构建的结果 编译compile Java源程序编译成*.class字节码文件 测试test 运行提前准备好的测试程序,执行src/text/java下的junit测试用例 报告site 每次测试后用标准格式记录和…

射频校准简略

射频电路功能的是否正常,在测试时就可发现,而怎么样使测试的数据正确,对测试的仪器进行校准是必不可少的环节,校准的目的就是减少测试的误差,使测试的仪器能够准确的反映待测件的性能,在校准过程中&#xf…