DeepSeek LeetCode 3585. 树中找到带权中位节点 Python3实现

发布时间:2026/7/16 8:49:58

DeepSeek    LeetCode 3585. 树中找到带权中位节点 Python3实现
解题思路核心思想利用树上倍增LCA 二分跳跃在 O(log n) 时间内回答每个查询。1. 预处理· 以节点 0 为根DFS 计算每个节点的深度 depth[]、到根的距离 dist[]边权和以及倍增祖先表 parent[k][u]表示 u 的 2^k 级祖先。· 树中边权为正因此路径距离单调递增。2. 查询处理(u, v)· 若 u v答案就是 u。· 求 u 和 v 的 LCA l计算路径总权值 total dist[u] dist[v] - 2*dist[l]取半阈值 half (total 1) // 2向上取整。· 情况一中位节点在 u → l 这一段即 dist[u] - dist[l] half。从 u 向上跳找到最后一个满足 dist[u] - dist[ancestor] half 的祖先答案就是该祖先的父节点。· 情况二中位节点在 l → v 这一段。先计算 need half - (dist[u] - dist[l])表示从 l 向下还需走的权值。从 v 向上跳找到最浅最靠近 l的满足 dist[ancestor] - dist[l] need 的祖先该祖先即为答案。---Python3 实现pythonfrom typing import Listclass Solution:def findMedian(self, n: int, edges: List[List[int]], queries: List[List[int]]) - List[int]:# 建图邻接表adj [[] for _ in range(n)]for u, v, w in edges:adj[u].append((v, w))adj[v].append((u, w))LOG (n).bit_length() 1 # 倍增表大小parent [[-1] * n for _ in range(LOG)]depth [0] * ndist [0] * n# 迭代 DFS 预处理避免递归深度问题stack [(0, -1, 0, 0)] # (node, parent, depth, distance)while stack:u, p, d, w stack.pop()parent[0][u] pdepth[u] ddist[u] wfor v, wt in adj[u]:if v p:continuestack.append((v, u, d 1, w wt))# 构建倍增表for k in range(1, LOG):prev parent[k - 1]curr parent[k]for i in range(n):anc prev[i]curr[i] prev[anc] if anc ! -1 else -1# ---------- 辅助函数 ----------def kth_ancestor(u: int, k: int) - int:返回 u 的第 k 级祖先k 0若不存在返回 -1i 0while k:if k 1:u parent[i][u]if u -1:breakk 1i 1return udef lca(u: int, v: int) - int:返回 u 和 v 的最近公共祖先if depth[u] depth[v]:u, v v, u# 提升 u 至与 v 同深度u kth_ancestor(u, depth[u] - depth[v])if u v:return u# 一起向上跳for k in range(LOG - 1, -1, -1):if parent[k][u] ! parent[k][v]:u parent[k][u]v parent[k][v]return parent[0][u]def weighted_median(u: int, v: int) - int:if u v:return ul lca(u, v)total dist[u] dist[v] - 2 * dist[l]half (total 1) // 2 # 向上取整# 情况 1中位节点在 u - l 段if dist[u] - dist[l] half:cur ufor k in range(LOG - 1, -1, -1):nxt parent[k][cur]if nxt ! -1 and dist[u] - dist[nxt] half:cur nxtreturn parent[0][cur]# 情况 2中位节点在 l - v 段else:need half - (dist[u] - dist[l])cur vfor k in range(LOG - 1, -1, -1):nxt parent[k][cur]if (nxt ! -1 and depth[nxt] depth[l] anddist[nxt] - dist[l] need):cur nxtreturn cur# 处理所有查询return [weighted_median(u, v) for u, v in queries]---复杂度分析· 时间复杂度预处理 O(n log n)每个查询 O(log n)总复杂度 O((n q) log n)。· 空间复杂度邻接表 O(n)倍增表 O(n log n)总复杂度 O(n log n)。注意边权和路径总权值可能超过 32 位整数范围Python 的 int 无此限制无需额外处理。

相关新闻

免费AI编程助手:GPT-4级别性能的开发工具实战指南

免费AI编程助手:GPT-4级别性能的开发工具实战指南

2026/7/16 8:39:57

最近很多开发者都在问:现在有没有真正免费、稳定、还能体验接近 GPT-4 性能的 AI 工具?毕竟对于日常开发调试、代码生成、技术问题解答来说,动辄付费的 API 调用成本确实让人头疼。 如果你也在寻找这样的解决方案,那么这篇文章就…

C++电梯仿真系统:从面向对象设计到调度算法实现

C++电梯仿真系统:从面向对象设计到调度算法实现

2026/7/16 8:39:57

1. 项目概述与核心价值最近在整理过往的项目经验,发现一个挺有意思的课题:用C实现一个电梯仿真系统。这玩意儿乍一听像是学校里的课程设计,但真做下来,你会发现它是个绝佳的“麻雀虽小,五脏俱全”的练手项目。它几乎涵…

白鼠尾草、迷迭香、薰衣草:从材料鉴别到安全使用的完整指南

白鼠尾草、迷迭香、薰衣草:从材料鉴别到安全使用的完整指南

2026/7/16 8:39:57

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。白鼠尾草、迷迭香和薰衣草,听起来像是园艺或香氛材料,但在特定实践领域,它们常被当作基础工具来用。很多人拿到名字就急着找“最高效”的用法,结…

2.RabbitMQ常见高级特性

2.RabbitMQ常见高级特性

2026/7/16 10:20:01

本文总结RabbitMQ常见的高级特性,希望能每次看到这篇文章都可以快速理清并理解RabbitMQ的高级特性. 消息传输大致流程图: 一.消息确认机制:包含两部分("生产者→Broker(RabbitMQ服务器)"和"Broker--->消费者"这一过程): 1.生产者→Broker:发送方确认机…

Claude Code技能系统架构与开发实践

Claude Code技能系统架构与开发实践

2026/7/16 10:20:01

1. Claude Code技能系统架构解析Claude Code的技能系统是一个模块化扩展框架,允许用户通过创建、管理和共享技能来增强Claude的能力。这套系统由四个核心组件构成:CLAUDE.md:项目级配置文件,定义基础行为准则Hooks:事件…

电子工程师必备:总线分类、特性与选型实战指南

电子工程师必备:总线分类、特性与选型实战指南

2026/7/16 10:20:01

1. 电子工程师必知的总线分类与特性解析 作为一名在嵌入式系统领域摸爬滚打多年的工程师,我见过太多同行在项目初期因为总线选型不当而导致的"返工灾难"。记得去年有个智能家居项目,团队将温湿度传感器通过I2C总线连接主控,结果在3…

Qt Creator的下载、安装与配置(Windows):从零到一的完整避坑指南

Qt Creator的下载、安装与配置(Windows):从零到一的完整避坑指南

2026/7/16 10:20:01

1. Qt Creator简介与开发优势Qt Creator是Qt官方推出的跨平台集成开发环境(IDE),专为Qt应用程序开发设计。我第一次接触Qt Creator是在2013年,当时就被它强大的代码补全和可视化设计功能惊艳到了。经过这些年的发展,Qt…

企业级智能体开发框架全解析,含实战案例与迁移指南!

企业级智能体开发框架全解析,含实战案例与迁移指南!

2026/7/16 10:20:01

目录 AgentScope 2.0 项目总览AgentScope Harness 核心底层设计AgentScope 企业级智能体四大实战案例总结 一、AgentScope 2.0 项目总览 1.1 项目定位 AgentScope 是阿里巴巴自研企业级、分布式智能体开发框架,覆盖智能体开发、部署、调优全生命周期,目标…

专业的学生综合素质评价公司

专业的学生综合素质评价公司

2026/7/16 10:10:01

最近走访了几所学校,发现一个很有意思的现象:学校花了几十万甚至上百万采购的学生综合素质评价系统,最后大部分都成了摆设。老师们嫌弃操作复杂、录入繁琐,学生们觉得就是个“加分工具”,家长更是一头雾水。这不是个别…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

2026/7/16 0:09:31

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

跨境电商多语言商品图翻译方案实现

跨境电商多语言商品图翻译方案实现

2026/7/16 0:09:31

一、问题引入对于做跨境电商的卖家来说,多语言商品图的制作一直是令人头疼的环节。当你准备在亚马逊、Shopee、Lazada等多个平台同步上架新品时,首先遇到的就是图片翻译问题。以一位做家居用品的卖家为例,他需要将200张商品图片中的英文文案全…

Windows系统文件d3dx9_36.dll丢失找不到问题解决

Windows系统文件d3dx9_36.dll丢失找不到问题解决

2026/7/16 0:09:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…