news 2026/4/17 20:44:36

冗余连接II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
冗余连接II

本文参考代码随想录

在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。

输入一个有向图,该图由一个有着 n 个节点(节点值不重复,从 1 到 n)的树及一条附加的有向边构成。附加的边包含在 1 到 n 中的两个不同顶点间,这条附加的边不属于树中已存在的边。

结果图是一个以边组成的二维数组 edges 。 每个元素是一对 [ui, vi],用以表示 有向 图中连接顶点 ui 和顶点 vi 的边,其中 ui 是 vi 的一个父节点。

返回一条能删除的边,使得剩下的图是有 n 个节点的有根树。若有多个答案,返回最后出现在给定二维数组的答案。

思路

有如下三种情况,前两种情况是出现入度为2的点,

第三种情况是没有入度为2的点,那么图中一定出现了有向环

classSolution:definit(self,n):self.fathers=[iforiinrange(n+1)]deffind(self,u):ifself.fathers[u]==u:returnu self.fathers[u]=self.find(self.fathers[u])returnself.fathers[u]defisSame(self,u,v):returnself.find(u)==self.find(v)defjoin(self,u,v):# u -> vu=self.find(u)v=self.find(v)ifu==v:returnself.fathers[v]=udefisTreeAfterRemove(self,edge,edges):self.init(len(edges)+1)foreinedges:ife==edge:continueifself.isSame(e[0],e[1]):returnFalseself.join(e[0],e[1])returnTruedefremoveCircleEdge(self,edges):self.init(len(edges)+1)foreinedges:ifself.isSame(e[0],e[1]):returne self.join(e[0],e[1])deffindRedundantDirectedConnection(self,edges:List[List[int]])->List[int]:inDegrees=[0]*(len(edges)+1)twoDegreeVecs=[]foreinedges:inDegrees[e[1]]+=1foreinedges:ifinDegrees[e[1]]==2:twoDegreeVecs.append(e)iflen(twoDegreeVecs)>0:foreintwoDegreeVecs[::-1]:ifself.isTreeAfterRemove(e,edges):returnereturnself.removeCircleEdge(edges)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:24:11

AUTOSAR架构图基础讲解:手把手认识经典平台结构

手把手拆解AUTOSAR架构图:从分层逻辑到实战落地你有没有遇到过这样的场景?接手一个ECU项目,代码里满是直接操作寄存器的裸机风格函数,换颗MCU就得重写大半;或者多个供应商交付的模块集成时接口对不上,调试几…

作者头像 李华
网站建设 2026/4/18 8:41:30

sbit入门必看:51单片机特殊功能寄存器定义详解

从点亮一个LED开始:深入理解51单片机中的sbit位定义你有没有过这样的经历?在调试一段51单片机代码时,看到别人用P1_0 1;就能直接控制某个引脚的电平,而自己还在写P1 | 0x01;和P1 & ~0x01;来翻转位状态。更奇怪的是——人家的…

作者头像 李华
网站建设 2026/4/18 7:58:29

STM32CubeMX安装教程:手把手带你完成开发环境搭建

从零开始搭建STM32开发环境:手把手教你搞定CubeMX安装与配置 你是不是也经历过这样的场景?刚买来一块STM32开发板,兴致勃勃地打开电脑准备点个LED,结果卡在第一步——连开发工具都装不起来。查了一堆教程,有的说要先装…

作者头像 李华
网站建设 2026/4/18 7:02:56

PCBA元件选型与封装匹配:项目应用指南

PCBA元件选型与封装匹配:从设计到量产的实战指南在一块PCB上,成百上千个元器件各司其职,协同工作。但你有没有遇到过这样的情况——原理图画得完美无缺,仿真结果也令人满意,可第一版打样回来,贴片厂却告诉你…

作者头像 李华
网站建设 2026/4/17 12:56:27

基于域名的动态数据源切换实现教程

概述这是一个基于Spring Boot的多数据源动态切换方案,通过解析请求的域名自动选择对应的数据源。核心组件实现1. 会话上下文管理 (SessionContext)使用 TransmittableThreadLocal 实现线程间数据传递提供统一的键值对存储接口在请求开始时清理旧数据,在结…

作者头像 李华
网站建设 2026/4/18 8:39:02

SPI控制器功能验证实践:基于iverilog的端到端流程

SPI控制器功能验证实践:从零构建基于Icarus Verilog的开源仿真流程 你有没有遇到过这样的场景?手头有个SPI控制器的RTL代码,想快速跑个仿真看看时序对不对,结果发现公司没有VCS许可证,ModelSim又太重启动慢&#xff0c…

作者头像 李华