Kimi LeetCode 3553. 包含要求路径的最小带权子图 II Rust实现

发布时间:2026/9/15 10:11:15

Kimi    LeetCode 3553. 包含要求路径的最小带权子图 II Rust实现 这是 LeetCode 3553 的 Rust 实现。核心思路是答案 (dist(src1, src2) dist(src1, dest) dist(src2, dest)) / 2即三个点的最小连通子树的边权和等于两两距离之和除以 2。求树上距离需要用到 LCA 倍增。rustuse std::collections::VecDeque;struct Solution;impl Solution {pub fn minimum_weight(edges: VecVeci32, queries: VecVeci32) - Veci32 {let n edges.len() 1;if n 0 {return vec![];}// 建图let mut graph: VecVec(usize, i32) vec![vec![]; n];for e in edges {let u e[0] as usize;let v e[1] as usize;let w e[2];graph[u].push((v, w));graph[v].push((u, w));}// 倍增 LCA 预处理let log_n (n as f64).log2().ceil() as usize 1;let mut up vec![vec![0; log_n]; n]; // up[v][j] 2^j 级祖先let mut depth vec![0; n];let mut dist vec![0i64; n]; // 到根的距离用 i64 防溢出// BFS/DFS 预处理第一层祖先、深度、距离let mut q VecDeque::new();q.push_back(0);up[0][0] 0; // 根节点的父节点是自己let mut visited vec![false; n];visited[0] true;while let Some(u) q.pop_front() {for (v, w) in graph[u] {if !visited[v] {visited[v] true;up[v][0] u;depth[v] depth[u] 1;dist[v] dist[u] w as i64;q.push_back(v);}}}// 倍增表for j in 1..log_n {for v in 0..n {up[v][j] up[up[v][j - 1]][j - 1];}}// LCA 函数let lca |mut u: usize, mut v: usize| - usize {if depth[u] depth[v] {std::mem::swap(mut u, mut v);}// 将 v 提升到与 u 同一深度let diff depth[v] - depth[u];for j in 0..log_n {if (diff j) 1 1 {v up[v][j];}}if u v {return u;}// 从大到小跳for j in (0..log_n).rev() {if up[u][j] ! up[v][j] {u up[u][j];v up[v][j];}}up[u][0]};// 树上距离let distance |u: usize, v: usize| - i64 {let w lca(u, v);dist[u] dist[v] - 2 * dist[w]};// 回答每个查询queries.into_iter().map(|q| {let src1 q[0] as usize;let src2 q[1] as usize;let dest q[2] as usize;let d12 distance(src1, src2);let d1d distance(src1, dest);let d2d distance(src2, dest);((d12 d1d d2d) / 2) as i32}).collect()}}思路说明步骤 说明建图 无向带权树用邻接表存储BFS 预处理 以 0 为根计算每个节点的深度 depth[] 和到根的距离 dist[]同时记录每个节点的直接父节点 up[v][0]倍增表 up[v][j] 表示节点 v 的 2^j 级祖先O(n \log n) 预处理LCA 每次查询 O(\log n)先统一深度再同时向上跳树上距离 \text{dist}(u, v) \text{dist}[u] \text{dist}[v] - 2 \cdot \text{dist}[\text{lca}(u,v)]最终答案 对于每个查询(\text{dist}(src1, src2) \text{dist}(src1, dest) \text{dist}(src2, dest)) / 2复杂度- 时间O(n \log n q \log n)其中 q 为查询数- 空间O(n \log n) 注意dist 数组使用 i64因为 n \le 10^5边权 w_i \le 10^4最大距离约为 10^9虽然 i32 能放下但中间求和时三数相加可能溢出故用 i64 更安全。
延伸阅读

更多相关文章

2026/9/15 2:39:45

QPSK/DQPSK 调制解调系统仿真:从星座图到相位模糊的实战解析

1. QPSK/DQPSK调制解调系统仿真入门指南第一次接触QPSK和DQPSK时,我完全被那些星座图和相位跳变搞晕了。直到在实验室里亲手用示波器观测到真实的信号波形,才真正理解这两种调制方式的精妙之处。咱们今天就用最接地气的方式,聊聊如何通过仿真…

2026/9/14 16:34:00

AI代理协作系统:模拟游戏工作室的LLM结构化应用实践

1. 项目概述:当AI学会“开公司”如果你是一名独立游戏开发者,或者是一个小型创意团队的核心成员,那么下面这个场景你一定不陌生:深夜,你对着空白的代码编辑器或设计文档,脑子里有无数个关于新游戏的绝妙想法…

2026/9/15 10:07:14

Flutter在鸿蒙生态中的开发实践与优化

1. 为什么Flutter在鸿蒙生态中值得关注Flutter作为Google推出的跨平台UI框架,近年来在移动开发领域获得了广泛关注。而鸿蒙(HarmonyOS)作为新兴的分布式操作系统,其独特的架构设计和多设备协同能力也吸引了大量开发者。将Flutter应…

2026/9/15 10:07:14

如何用 Forest 以声明式方式完成 Java 第三方接口对接?

如何用 Forest 以声明式方式完成 Java 第三方接口对接? 【免费下载链接】toBeBetterJavaer 一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准二哥的…

2026/9/15 10:07:14

Rocky Linux 9零基础入门:企业级迁移与生产部署实战

1. 为什么Rocky Linux成了CentOS用户的新“默认选项”?2021年12月,Red Hat官方一纸公告,将CentOS Stream定位为RHEL的上游开发分支,同时宣布CentOS Linux 8提前于2021年12月31日终止维护,CentOS Linux 7则延长至2024年…

2026/9/15 10:07:14

Halcon形态学与Blob连通域分析工业实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 10:07:14

Java毕设网上订餐系统:从数据库设计到答辩的全流程指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码