leetcode 3559. Number of Ways to Assign Edge Weights II

  • leetcode 3559. Number of Ways to Assign Edge Weights II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3559. Number of Ways to Assign Edge Weights II

1. 解题思路

这一题是题目3558. Number of Ways to Assign Edge Weights I的进阶版本。

对于题目3558来说,其核心就是找出树的最大深度,然后就是一个数学题了,要使得这一条路径上的边的总和为奇数,那么其可选的方式为:
N = ∑ i = 1 i ≤ n , i = 1 , 3 , 5 , ⋯ C n i = 2 n − 1 N = \sum\limits_{i=1}^{i \leq n, i=1,3,5,\cdots} C_{n}^{i} = 2^{n-1} N=i=1in,i=1,3,5,Cni=2n1

因此,我们可以直接计算出其结果。

而对于本题,问题增加的难度在于需要快速地任意给到的两个点 u , v u,v u,v,找出这两点间的连接线段的长度,而这个的话事实上和题目3553. Minimum Weighted Subgraph With the Required Paths II非常相近,事实上我们只需要分别求出这两个点 u , v u,v u,v的深度以及他们的最小公共父节点 p p p的深度,那么 u , v u,v u,v间的距离 d d d就可以快速通过下述公式计算得到:
d = h u + h v − 2 × h p d = h_u + h_v - 2\times h_p d=hu+hv2×hp

剩下的就是如何求出 u , v u,v u,v的最小公共父节点了,而这个事实上就是一个经典算法了,这里就不具体展开了,后续有时间的话可能会系统整理一下这个算法然后发一篇博客作为备忘好了。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7class LCA:def __init__(self, root, tree):self.max_level = 20  # 根据树的高度调整self.parent = defaultdict(lambda: [-1]*self.max_level)self.depth = {}self.preprocess(root, tree)def preprocess(self, root, tree):stack = [(root, -1, 0)]  # (node, parent, depth)while stack:node, par, d = stack.pop()self.depth[node] = dself.parent[node][0] = parfor k in range(1, self.max_level):if self.parent[node][k-1] != -1:self.parent[node][k] = self.parent[self.parent[node][k-1]][k-1]for child in tree[node]:if child != par:stack.append((child, node, d+1))def query(self, u, v):if self.depth[u] < self.depth[v]:u, v = v, u# 对齐深度for k in range(self.max_level-1, -1, -1):if self.depth[u] - (1 << k) >= self.depth[v]:u = self.parent[u][k]if u == v:return u# 同步跳转for k in range(self.max_level-1, -1, -1):if self.parent[u][k] != -1 and self.parent[u][k] != self.parent[v][k]:u = self.parent[u][k]v = self.parent[v][k]return self.parent[u][0]class Solution:def assignEdgeWeights(self, edges: List[List[int]], queries: List[List[int]]) -> List[int]:graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)depth = defaultdict(int)tree = defaultdict(list)def dfs(u, p):nonlocal depth, treeif u == 1:depth[u] = 0else:depth[u] = depth[p] + 1for v in graph[u]:if v == p:continuetree[u].append(v)dfs(v, u)returndfs(1, 0)lca = LCA(1, tree)def query(u, v):p = lca.query(u, v)d = depth[u] + depth[v] - 2*depth[p]return pow(2, d-1, MOD) if d > 0 else 0return [query(u, v) for u, v in queries]

提交代码评测得到:耗时2773ms,占用内存137.3MB。

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

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

相关文章

推理模型 vs 非推理模型:核心区别及优劣势解析

推理能力上的差异 推理模型在推理能力方面表现突出,它们擅长通过生成中间步骤和“思维链”逐步解决复杂问题。这意味着面对数学计算、逻辑推理、多跳推断等任务时,推理模型能够将问题分解为若干子步骤,每一步给出推理结果,最终汇总得到答案。这种逐步推导的方式使得推理模…

OPENEULER搭建私有云存储服务器

一、关闭防火墙和selinux 二、下载相关软件 下载nginx&#xff0c;mariadb、php、nextcloud 下载nextcloud&#xff1a; sudo wget https://download.nextcloud.com/server/releases/nextcloud-30.0.1.zip sudo unzip nextcloud-30.0.1.zip -d /var/www/html/ sudo chown -R…

Docker 与微服务架构:从单体应用到容器化微服务的迁移实践

随着软件系统规模和复杂性的日益增长,传统的单体应用(Monolithic Application)在开发效率、部署灵活性和可伸缩性方面逐渐暴露出局限性。微服务架构(Microservice Architecture)作为一种将大型应用拆分为一系列小型、独立、松耦合服务的模式,正成为现代企业构建弹性、敏捷…

【C#】Invalidate()的使用

Invalidate()的使用 Invalidate() 是 C# 中用于通知控件需要重新绘制的方法。它通常用于 Windows Forms 应用程序中&#xff0c;当想要更新控件的显示内容时使用。调用 Invalidate() 方法后&#xff0c;系统会安排对该控件进行重绘&#xff0c;这将导致后续调用 OnPaint 方法&…

我店模式系统开发打造本地生活生态商圈

在当今快节奏的商业环境中&#xff0c;商家们面临着越来越多的挑战&#xff0c;包括市场竞争加剧、消费者需求多样化以及运营效率的提高等。为了应对这些挑战&#xff0c;越来越多的商家开始寻求信息化解决方案&#xff0c;以提升运营效率和客户体验。我的店模式系统平台应运而…

Linux(Ubuntu)新建文件权限继承问题

当你在一个工作目权限为777的文件下&#xff0c;新建一个文件的时候&#xff0c;就有可能发生&#xff0c;新建的这个文件&#xff0c;权限和其他文件&#xff0c;或者工作目录不一致的问题&#xff0c;我们不可能每次新建一个文件&#xff0c;就要 sudo chmod -R 777 /PATH 所…

Vue3和React中插件化设计思想

Vue 3 和 React 都广泛支持插件化设计思想&#xff0c;但因为它们的架构和理念不同&#xff0c;插件化的实现方式也不尽相同。以下分别详细讲解这两者中如何实现插件化&#xff1a; &#x1f7e9; 一、Vue 3 中的插件化实现 Vue 3 继承了 Vue 2 的插件机制&#xff0c;同时增强…

Excel 密码忘记了?巧用PassFab for Excel 解密帮您找回数据!

在工作中&#xff0c;你是否遇到过这样的尴尬时刻&#xff1f;打开重要的 Excel 文件&#xff0c;却发现忘记密码&#xff0c;里面的财务报表、客户数据、项目计划瞬间变成 “加密天书”。重新制作耗时耗力&#xff0c;找专业人员解密又担心数据泄露&#xff0c;这个时候&#…

Vue3 与 Vue2 区别

一、Vue3 与 Vue2 区别 对于生命周期来说&#xff0c;整体上变化不大&#xff0c;只是大部分生命周期钩子名称上 “on”&#xff0c;功能上是类似的。不过有一点需要注意&#xff0c;组合式API的Vue3 中使用生命周期钩子时需要先引入&#xff0c;而 Vue2 在选项API中可以直接…

Axure高级交互设计:中继器嵌套动态面板实现超强体验感台账

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:中继器嵌套动态面板 主要内容:中继器内部嵌套动态面板,实现可移动式台账,增强数据表现…

Spring中用到的设计模式详解

Spring 在设计和实现过程中大量使用了设计模式&#xff0c;这些设计模式不仅提升了 Spring 的灵活性和可扩展性&#xff0c;还为开发者提供了更高效、更优雅的编程方式。以下是 Spring 框架中使用的一些常见设计模式&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&am…

Typescript学习教程,从入门到精通,TypeScript 集合类型语法知识点及案例代码(11)

TypeScript 集合类型语法知识点及案例代码 TypeScript 提供了多种集合类型&#xff0c;用于存储和管理数据。以下将详细介绍 数组&#xff08;Array&#xff09;、元组&#xff08;Tuple&#xff09;、集合&#xff08;Set&#xff09; 和 映射&#xff08;Map&#xff09;&am…

在 Win 10 上,Tcl/Tk 脚本2个示例

参阅&#xff1a;Tcl/Tk 教程 set PATH 新增 D:\Git\mingw64\bin where tclsh D:\Git\mingw64\bin\tclsh.exe where wish D:\Git\mingw64\bin\wish.exe 编写 test_tk.tcl 如下 #!/usr/bin/tclsh # test 文件对话框 package require Tk# 弹出文件选择对话框&#xff0c;限…

Qt环境的搭建

Qt安装 Qt开发环境需要安装三个部分 1.C编译器(不是vs) 2.Qt SDK 3.需要一个Qt的集成开发环境 说是需要三个部分,但实际上是需要安装Qt SDK就足够了 QtSDK可以直接去官网下载 下载完成后需要配置一下环境变量 可以直接在系统中搜索"编辑系统环境变量" 为什么要…

Vue3中reactive响应式使用注意事项

Vue 3 的 reactive 是创建响应式对象的核心 API&#xff0c;但在使用过程中有一些需要注意的事项&#xff1a; 1&#xff1a;基本使用限制 仅对对象类型有效&#xff1a;reactive 只能用于对象类型&#xff08;Object、Array、Map、Set 等&#xff09;&#xff0c;不能用于原始…

STM32+rt-thread使用MQTT协议连接腾讯物联网平台

STM32rt-thread使用MQTT协议连接腾讯物联网平台 一、腾讯云sdk下载1、进入腾讯物联网平台文件[点击链接跳转](https://cloud.tencent.com.cn/document/product/1081/48356)2、下载csdk 二、移植腾讯云sdk1、将上面解压的文件夹复制到自己工程目录下2、文件添加到自己工程 三、连…

【MySQL成神之路】MySQL函数总结

以下是MySQL函数的全面总结&#xff0c;包含概念说明和代码示例&#xff1a; 一、MySQL函数分类 1. 字符串函数 -- CONCAT&#xff1a;连接字符串 SELECT CONCAT(Hello, , World); -- 输出 Hello World -- SUBSTRING&#xff1a;截取子串 SELECT SUBSTRING(MySQL, 2, 3…

JavaScript 异步编程、对象/数组操作

异步编程 JavaScript 是单线程语言&#xff0c;通过事件循环机制处理异步操作。任务分为两种&#xff1a; 宏任务(Macrotask): script整体代码、setTimeout&#xff08;时间结束执行&#xff09;、setInterval&#xff08;间隔执行&#xff09;、I/O、UI渲染 微任务(Microtas…

中小制造企业网络安全防护指南

考虑到文章内容较长&#xff0c;简要内容图片在文档末尾&#xff0c;请直接翻阅到底部查看 引言&#xff1a;中小制造企业面临的独特网络安全挑战 中小制造企业 (SME) 在当今数字化浪潮中扮演着至关重要的角色&#xff0c;然而&#xff0c;伴随技术进步而来的是日益严峻且独特…

es学习小结

1.​客户端类型​ ​推荐场景​ ​版本兼容性​ Elasticsearch Java API Client 新项目、ES 8.x集群 8.x及以上 Spring Data Elasticsearch Spring生态项目、简化ORM操作 ES 7.x-8.x&#xff08;需版本匹配&#xff09; Low-Level REST Client 需要底层HTTP控制、兼容多版本ES …