news 2026/6/25 15:48:20

更弱智的算法学习 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/6/20 10:26:35

安捷伦 Keysight 16195B 是德 16195B 校准套件

是德科技 16195B校准套件‌主要用于高频阻抗测量仪的校准,特别是在7 mm接头平面上进行校准。该套件包含以下组件: E4991-60021 (SHORT)、 E4991-60022 (OPEN)以及一个50欧姆的负载,频率范围为DC…

作者头像 李华
网站建设 2026/6/19 22:40:09

力科Teledyne LeCroy PP024 示波器探头 PP024-2

力科PP024探头 是一款无源衰减探头,适用于示波器,具有10:1的衰减值和500MHz的带宽。‌ 该探头的输入电阻为10MΩ,最大电压值为CAT I 500V和CAT II 400V,输入电容为10pF,电缆长度为51.181英寸(约1300毫米&am…

作者头像 李华
网站建设 2026/6/20 10:27:28

springboot旅游旅行攻略网站的设计与实现vue

目录系统架构设计核心功能模块技术实现要点扩展功能设计部署方案开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统架构设计 SpringBoot旅游旅行攻略网站采用前后端分离架构,后端使用SpringBoot框架提供RESTful A…

作者头像 李华
网站建设 2026/6/20 10:23:10

【dz-670】基于单片机的智能化光伏发电监控与管理系统设计

基于单片机的智能化光伏发电监控与管理系统 摘要:当前全球能源需求持续增长,同时对环境保护的重视程度也日益提高,光伏发电作为一种有清洁、可再生特性的能源技术,已获得广泛应用,本文设计了一种以单片机为基础的智能化…

作者头像 李华
网站建设 2026/6/23 7:54:29

ZUI15 平板充电样式怎么改?个性化设置教程来了!

对于使用联想 ZUI15 系统平板的用户来说,细节处的个性化定制总能让设备更具专属感。充电时的显示样式看似是小细节,却能在日常使用中带来不一样的仪式感 —— 单调的默认样式看久了难免乏味,不少小伙伴都在寻找更改充电样式的方法&#xff0c…

作者头像 李华
网站建设 2026/6/24 13:18:12

计算机毕设Java基于微信小程序的社区志愿者服务管理系统 基于微信小程序的社区志愿服务管理平台的Java开发实践 微信小程序环境下Java实现的社区志愿者服务管理系统设计

计算机毕设Java基于微信小程序的社区志愿者服务管理系统76x8l9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着社会的快速发展,社区志愿服务在促进社区和谐与提…

作者头像 李华