news 2026/6/10 20:37:11

更弱智的算法学习 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/9 23:40:00

网络工程师有哪些岗位可以选择?技术决定下限,方向决定上限!

很多人眼里的网络工程师是这样的: 配交换机、路由器 拉网线、做 VLAN、调 ACL 排查网络故障 做割接、加设备、上链路 但现实是: 如果你只停留在“配置设备”的层面,职业天花板会非常低。 真正决定你职业高度的,不是你会多少命令,而是: 你站在网络体系的哪一层? 你解决的…

作者头像 李华
网站建设 2026/6/10 10:58:16

内网横向——VulnStack-2靶场万字详细解析教程(MSF渗透,黄金票据利用)

本教程围绕 VulnStack-2 靶场展开,从外网信息收集、漏洞利用获取初始权限入手,逐步讲解内网横向移动、黄金票据提权的完整渗透流程,带你沉浸式体验真实内网攻防场景。 文章目录靶场介绍攻击技术网络配置信息内网网段设置NAT网段设置靶机设置W…

作者头像 李华
网站建设 2026/6/9 21:02:27

立体仓库“数字堆垛”:重力仿真让货架承重利用率提12%

堆垛规划是立体仓库高效运营的核心,货架承重利用率直接决定仓储容量、运营成本与存储安全。传统立体仓库堆垛依赖人工经验分配货位,仅简单根据货物重量粗略摆放,无法精准测算货物堆放后的重力分布,为规避货架过载风险,…

作者头像 李华
网站建设 2026/6/10 11:29:59

微软紧急更新修复Office 0Day漏洞(CVE-2026-21509)

漏洞影响范围微软发布带外安全更新,修复了一个正在被积极利用的Office 0Day漏洞(CVE-2026-21509)。该安全功能绕过漏洞影响多个Office版本,包括Microsoft Office 2016、Microsoft Office 2019、Microsoft Office LTSC 2021、Micro…

作者头像 李华
网站建设 2026/6/10 11:44:29

ChatGPT引用马斯克AI生成的Grokipedia是否陷入“内容陷阱“?

Grokipedia是由埃隆马斯克的人工智能公司xAI创建的wikipedia式知识库,其独特之处在于所有内容均由Grok AI自主编写。该平台从互联网采集原始数据,经过综合处理后生成百科全书式条目。 "内容陷阱" 的潜在风险 近期观察发现,ChatGP…

作者头像 李华
网站建设 2026/6/10 11:29:43

宠物交流平台的设计与实现(11811)

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

作者头像 李华