Leetcode 261. 以图判树

1.题目基本信息

1.1.题目描述

给定编号从 0 到 n - 1 的 n 个结点。给定一个整数 n 和一个 edges 列表,其中 edges[i] = [ai, bi] 表示图中节点 ai 和 bi 之间存在一条无向边。

如果这些边能够形成一个合法有效的树结构,则返回 true ,否则返回 false 。

1.2.题目地址

https://leetcode.cn/problems/graph-valid-tree/description/

2.解题方法

2.1.解题思路

并查集

2.2.解题步骤

并查集方法步骤

  • 第一步,构建并查集,并将所有的节点添加到并查集中

  • 第二步,遍历所有的边,将相关相连的点进行连接,如果边的两端都在同一个集合中,则代表存在环,直接返回false

  • 第三步,如果图中无环,则只要并查集中的集合数为1就能保证图能构建成熟

DFS方法步骤

  • 第一步,构建邻接表和访问状态(分为未访问、访问中、已访问)

  • 第二步,构建递归函数。递归任务:返回node所在连通分量中是否有环

  • 第三步,如果图中无环且只有一个连通分量则可以构建成树

3.解题代码

DFS版本代码

class Solution:# 判断无向图有无环:DFS+三色标记法def validTree(self, n: int, edges: List[List[int]]) -> bool:# 第一步,构建邻接表和访问状态(分为未访问、访问中、已访问)graph=[[] for _ in range(n)]for edge in edges:graph[edge[0]].append(edge[1])graph[edge[1]].append(edge[0])states=[0]*n    # 0表示未访问,1表示访问中,2表示已访问# 第二步,构建递归函数。递归任务:返回node所在连通分量中是否有环def dfs(node,parentNode):for subNode in graph[node]:if subNode==parentNode:continueif states[subNode]==1:return Trueelif states[subNode]==0:states[subNode]=1if dfs(subNode,node):return Truestates[node]=2return False# 第三步,如果图中无环且只有一个连通分量则可以构建成树states[0]=1return not dfs(0,-1) and all([states[i]==2 for i in range(n)])

并查集版本代码

# # ==> 并查集模板(附优化)
class UnionFind():def __init__(self):self.roots={}self.setCnt=0   # 连通分量的个数# Union优化:存储根节点主导的集合的总节点数self.rootSizes={}def add(self,x):if x not in self.roots:self.roots[x]=xself.rootSizes[x]=1self.setCnt+=1def find(self,x):root=xwhile root != self.roots[root]:root=self.roots[root]# 优化:压缩路径while x!=root:temp=self.roots[x]self.roots[x]=rootx=tempreturn rootdef union(self,x,y):rootx,rooty=self.find(x),self.find(y)if rootx!=rooty:# 优化:小树合并到大树上if self.rootSizes[rootx]<self.rootSizes[rooty]:self.roots[rootx]=rootyself.rootSizes[rooty]+=self.rootSizes[rootx]else:self.roots[rooty]=rootxself.rootSizes[rootx]+=self.rootSizes[rooty]self.setCnt-=1class Solution:# 并查集def validTree(self, n: int, edges: List[List[int]]) -> bool:# 第一步,构建并查集,并将所有的节点添加到并查集中uf=UnionFind()for i in range(n):uf.add(i)# 第二步,遍历所有的边,将相关相连的点进行连接,如果边的两端都在同一个集合中,则代表存在环,直接返回falsefor node1,node2 in edges:if uf.find(node1)!=uf.find(node2):uf.union(node1,node2)else:# 有环return False# 第三步,如果图中无环,则只要并查集中的集合数为1就能保证图能构建成熟return uf.setCnt==1

4.执行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ISAQB大纲解读】LG 1-8:区分显性陈述和隐性假设(R1)

软件架构师&#xff1a; 应明确提出假设或先决条件&#xff0c;从而防止隐性假设 知道隐性假设可能会导致利益相关方之间的潜在误解 1. 应明确提出假设或先决条件&#xff0c;防止隐性假设 为什么重要&#xff1f; 隐性假设是架构风险的温床 例如&#xff1a;假设“所有服务都…

IT运维工具的选择标准有哪些?

选择IT运维工具时&#xff0c;可参考以下标准&#xff0c;确保工具适配业务需求且高效易用&#xff1a; 1. 明确业务需求与场景 • 核心目标&#xff1a;根据运维场景&#xff08;如监控、自动化、安全等&#xff09;匹配工具功能。例如&#xff0c;监控大规模集群选Promethe…

MySQL 核心知识整理【一】

一、MySQL存储引擎对比&#xff1a;InnoDB vs MyISAM 在使用MySQL时&#xff0c;选择合适的存储引擎对性能影响很大。最常见的两个引擎是 InnoDB 和 MyISAM&#xff0c;它们各自的设计目标不同&#xff0c;适用场景也不一样。 事务与数据安全性方面&#xff0c;InnoDB 支持事…

人工智能在智能制造业中的创新应用与未来趋势

随着工业4.0和智能制造的快速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正在深刻改变制造业的各个环节。从生产自动化到质量检测&#xff0c;从供应链优化到设备维护&#xff0c;AI的应用不仅提高了生产效率&#xff0c;还提升了产品质量和企业竞争力。本文将探讨…

arc3.2语言sort的时候报错:(sort < `(2 9 3 7 5 1)) 需要写成这种:(sort > (pair (list 3 2)))

arc语言sort的时候报错&#xff1a;(sort < (2 9 3 7 5 1)) arc> (sort < (2 9 3 7 5 1)) Error: "set-car!: expected argument of type <pair>; given: 9609216" arc> (sort < (2 9 3 )) Error: "Function call on inappropriate object…

Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决

Ubuntu 24.04 LTS Chrome 中文输入法&#xff08;搜狗等&#xff09;失效&#xff1f;一行命令解决 在 Ubuntu 24.04 LTS 中&#xff0c;如果你发现 Chrome 浏览器用不了搜狗输入法或其他 Fcitx5 中文输入法&#xff0c;可以试试下面的方法。 直接上解决方案&#xff1a; 打…

大模型前处理-CPU

前处理包含哪些流程 分词 tokenizationembedding CPU可以做哪些优化 分词 分词在做什么&#xff1f; 什么是词元化&#xff1f; 词元化&#xff08;Tokenization&#xff09;是把一段自然语言文本拆分成更小的单元&#xff08;称为“词元”&#xff0c;即 Token&#xff0…

Kafka数据怎么保障不丢失

在分布式消息系统中&#xff0c;数据不丢失是核心可靠性需求之一。Apache Kafka 通过生产者配置、副本机制、持久化策略、消费者偏移量管理等多层机制保障数据可靠性。以下从不同维度解析 Kafka 数据不丢失的核心策略&#xff0c;并附示意图辅助理解。 一、生产者端&#xff1a…

图像处理篇---face_recognition库实现人脸检测

以下是使用face_recognition库实现人脸检测的详细步骤、实例代码及解释&#xff1a; 一、环境准备 1. 安装依赖库 pip install face_recognition opencv-python # 核心库 pip install matplotlib # 用于显示图像&#xff08;可选&#xff09;2. 依赖说明 face_recognitio…

vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行

参数顺序问题&#xff1a;OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样? OleDbParameter 顺序依赖性的原因 OleDb 数据提供程序依赖参数添加顺序而非名称&#xff0c;这是由 OLE DB 规范和 Access 数据库的工作机制共同决定的。理解这个问题需要从数据库底层通信…

Syslog 全面介绍及在 C 语言中的应用

Syslog 概述 Syslog 是一种工业标准的日志记录协议&#xff0c;用于在网络设备之间传递日志消息。它最早由 Eric Allman 在 1980 年代为 BSD Unix 开发&#xff0c;现在已成为系统和网络管理的重要组成部分。Syslog 协议允许设备将事件消息发送到中央服务器&#xff08;称为 sy…

HackMyVM-Art

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 03:00 EDT Nmap scan report for 192.168.43.1 Host is up (0.0047s latency). MAC Address: C6:45:66:05:91:88 (Unknown) Nmap scan rep…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

DOCKER使用记录

1、拉取镜像 直接使用docker pull <image>&#xff0c;大概率会出现下面的报错信息&#xff1a; (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …

Java实习面试题

一、理想汽车一面 1、总结你这个人擅长什么&#xff0c;你的优势是什么&#xff1f; 2、挑一个项目详细讲讲&#xff0c;重点讲下你怎么设计的&#xff0c;你的思路是什么&#xff0c;你做的过程中遇到什么难点&#xff0c;怎么克服这些难点&#xff1f; 3、使用RabbitMQ处理…

单元测试报错

报错信息如下所示&#xff1a; 五月 30, 2025 5:35:44 下午 org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not…

00 QEMU源码分析中文注释与架构讲解(v8.2.4版本)

QEMU-v8.2.4源码中文注释与架构讲解 文档会不定期更新 注释作者将狼才鲸创建日期2025-05-30更新日期2025-06-02 CSDN阅读地址&#xff1a;QEMU源码中文注释与架构讲解Gitee源码仓库地址&#xff1a;才鲸嵌入式/qemu 一、前言 其它参考教程的网址&#xff1a; QEMU 源码目录…

线段树刷题记录

一篇讲解很好的线段树博客&#xff1a;数据结构--线段树篇_数据结构线段树-CSDN博客 一、区间查询 无修改&#xff1a; &#xff08;一&#xff09;最值问题&#xff1a; 1.P1816 忠诚 - 洛谷 思路&#xff1a; 模板。 注意&#xff1a; 无。 代码&#xff1a; #include …

从一到无穷大 #46:探讨时序数据库Deduplicate与Compaction的设计权衡

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言Compaction AlgorithmsCompact Execution Flow Based On VeloxLocalMergeSource的…

大厂前端研发岗位设计的30道Webpack面试题及解析

文章目录 一、基础核心二、配置进阶三、性能优化四、Loader原理五、Plugin机制六、高级应用七、工程化实战八、原理深挖九、异常处理十、综合场景一、基础核心 Webpack的核心概念是什么? 解析:入口(entry)、输出(output)、加载器(loader)、插件(plugins)、模式(mode)。Loader…