news 2026/4/23 15:57:39

更弱智的算法学习 day56

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
更弱智的算法学习 day56

使用并查集遍历所有边。当遇到一条边连接的两个节点已经属于同一连通分量时,这条边就是冗余边(因为它会形成环)。由于代码按输入顺序遍历边,最后记录的冗余边即为输入中最后出现的。

  • 遍历每条边时,若st已连通(is_same(s, t)True),说明添加该边会形成环,因此记录为result。由于继续遍历后续边,result会被更新,最终保留的是最后一条导致环的边,符合题目要求。若非冗余边,则调用join(s, t)合并集合,维护连通性。
  • 输出​:打印最后记录的冗余边。

father = list() def find(u): if u == father[u]: return u else: father[u] = find(father[u]) return father[u] def is_same(u, v): u = find(u) v = find(v) return u == v def join(u, v): u = find(u) v = find(v) if u != v: father[u] = v if __name__ == "__main__": # 輸入 n = int(input()) for i in range(n + 1): father.append(i) # 尋找冗余邊 result = None for i in range(n): s, t = map(int, input().split()) if is_same(s, t): result = str(s) + ' ' + str(t) else: join(s, t) # 輸出 print(result)

from collections import defaultdict father = list() def find(u): if u == father[u]: return u else: father[u] = find(father[u]) return father[u] def is_same(u, v): u = find(u) v = find(v) return u == v def join(u, v): u = find(u) v = find(v) if u != v: father[u] = v def is_tree_after_remove_edge(edges, edge, n): # 初始化并查集 global father father = [i for i in range(n + 1)] for i in range(len(edges)): if i == edge: continue s, t = edges[i] if is_same(s, t): # 成環,即不是有向樹 return False else: # 將s,t放入集合中 join(s, t) return True def get_remove_edge(edges): # 初始化并查集 global father father = [i for i in range(n + 1)] for s, t in edges: if is_same(s, t): print(s, t) return else: join(s, t) if __name__ == "__main__": # 輸入 n = int(input()) edges = list() in_degree = defaultdict(int) for i in range(n): s, t = map(int, input().split()) in_degree[t] += 1 edges.append([s, t]) # 尋找入度為2的邊,並紀錄其下標(index) vec = list() for i in range(n - 1, -1, -1): if in_degree[edges[i][1]] == 2: vec.append(i) # 輸出 if len(vec) > 0: # 情況一:刪除輸出順序靠後的邊 if is_tree_after_remove_edge(edges, vec[0], n): print(edges[vec[0]][0], edges[vec[0]][1]) # 情況二:只能刪除特定的邊 else: print(edges[vec[1]][0], edges[vec[1]][1]) else: # 情況三: 原圖有環 get_remove_edge(edges)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 17:54:14

每天一个网络知识:什么是交换式端口分析器 SPAN?

在学习交换机和局域网时,同学们可能会产生一个疑问: 交换机内部的数据是如何流动的?网络故障时,管理员又是如何“看到”网络中的数据包的? 要回答这些问题,就离不开我们今天要介绍的网络知识——SPAN&…

作者头像 李华
网站建设 2026/4/23 14:23:34

户外探险新利器:用照片to谷歌地球记录我的荒野足迹

探险者的困境 作为一名狂热的户外探险爱好者,我每年都会花大量时间在山林、沙漠、海岸线等荒野地带探索。从云南的高黎贡山到新疆的喀纳斯,从四川的稻城亚丁到青海的可可西里,我的足迹遍布祖国的大好河山。 然而,每次探险归来&a…

作者头像 李华
网站建设 2026/4/18 10:28:34

掌握这25条小贴士,快速提升数据可视化能力!

可视化不是单纯的数据展示,其真正价值是,设计出可以被读者轻松理解的数据展示。设计过程中的每一个选择,最终都应落地于读者的体验,而非设计者个人。笔者为大家整理了25条小贴士,能够快速帮助大家提升和巩固你的数据可…

作者头像 李华
网站建设 2026/4/23 14:47:35

基于Java Web的老年人健康管理系统(11813)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/3/26 18:54:13

计算机毕设java社区居民信息管理系统 基于Java的社区居民信息管理平台设计与实现 社区居民信息管理系统开发

计算机毕设java社区居民信息管理系统c6f169(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着信息技术的飞速发展,社区管理逐渐从传统的人工模式向智能化、信息化方…

作者头像 李华