当前位置: 首页 > news >正文

更弱智的算法学习 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)
http://www.jsqmd.com/news/309260/

相关文章:

  • 运动粘度仪/全自动运动粘度测定仪/自动低温乌氏粘度测定仪关键技术、应用场景与行业解决方案研究
  • 在哪下载主管护师备考资料?高分心得与资源分享
  • 主管护师备考资料获取与下载通径
  • 什么是SLA、DLP和LCD?一文读懂光固化3D打印三大技术
  • 1.4 xue
  • 2.1xue
  • 微信支付直连商户,自动处理消费者投诉,100多个商户、处理53000多条数据
  • vue2 单文件组件加入浏览器的title和ico的方法
  • 4.2XUE
  • vue展示node express调用python解析tdms
  • 2026执业药师考试资料推荐:高口碑实力榜推荐,测评对比全解析!
  • 3.3 xue
  • 执业药师考试资料推荐,这份推荐清单实力榜够靠谱!
  • 科普MB、mb、KB、GB、TB、KiB
  • 2026执业药师考试辅导班推荐:备考“宝藏”网课推荐,口碑与实力兼具
  • 2026执业药师考试辅导班推荐:三大执业药师网课深度解析,靠谱之选一目了然
  • 2026执业药师考试辅导班推荐:这份实力榜推荐,助考生一次过关!
  • # 2026年法律AI工具深度测评:智律云vs无讼vs法狗狗,谁最值得买?
  • 户外探险新利器:用照片to谷歌地球记录我的荒野足迹
  • 城市规划新方法:用照片to谷歌地球构建三维现状调研
  • 告别“救火队”,迈向高效终端管理:现代与传统模式的差异思考
  • 2026年CMDB选型对比指南:哪款产品能在复杂运维需求中脱颖而出?
  • 2026自动化运维选型风向标:聚焦全场景自动化,筑牢业务合规与稳定防线
  • 从 “工具整合” 到 “数据协同”:破解研发 - 办公数据孤岛的国产DevOps平台选型策略
  • 车载USB端口ESD管耐温与防护难两全?
  • oc_lf ldo sim
  • 基因组模型调研和选型
  • 执医考试资料哪家好?一起来看看阿虎医考“黑白组合卷”
  • 2026年重庆全屋定制木质家具品牌TOP5推荐榜单
  • 2026中医执医冲刺,你的刷题软件选对了吗?