DeepSeek    LeetCode 3559. 给边赋权值的方案数 II Python3实现
根据题目要求对于树中任意两个节点 u 和 v路径长度为 d边数使路径总代价为奇数的赋值方案数为 2^(d-1)。因此核心是快速求树上两点距离。Python3 实现pythonclass Solution:MOD 10**9 7def assignEdgeWeights(self, edges: List[List[int]], queries: List[List[int]]) - List[int]:n len(edges) 1# 1. 建图无向树graph [[] for _ in range(n)]for u, v in edges:u - 1v - 1graph[u].append(v)graph[v].append(u)# 2. 预处理深度和倍增表LOG (n).bit_length() # ceil(log2(n)) 1depth [0] * nup [[0] * LOG for _ in range(n)]# DFS 构建倍增表stack [(0, -1)] # (node, parent)order [] # 后序遍历顺序parent [-1] * nwhile stack:node, par stack.pop()parent[node] parorder.append(node)for nei in graph[node]:if nei ! par:depth[nei] depth[node] 1stack.append((nei, node))# 初始化 up[0]for i in range(n):up[i][0] parent[i] if parent[i] ! -1 else i# 构建倍增表for j in range(1, LOG):for i in range(n):up[i][j] up[up[i][j-1]][j-1]# 3. 预处理 2 的幂次pow2 [1] * (n 1)for i in range(1, n 1):pow2[i] (pow2[i-1] * 2) % self.MOD# 4. 处理每个查询ans []for u, v in queries:u - 1v - 1lca self._find_lca(u, v, depth, up, LOG)dist depth[u] depth[v] - 2 * depth[lca]ans.append(0 if dist 0 else pow2[dist - 1])return ansdef _find_lca(self, u, v, depth, up, LOG):求 LCA# 确保 u 是较浅的节点if depth[u] depth[v]:u, v v, u# 将 v 提升到与 u 同深度diff depth[v] - depth[u]for j in range(LOG):if (diff j) 1:v up[v][j]if u v:return u# 同时提升for j in range(LOG - 1, -1, -1):if up[u][j] ! up[v][j]:u up[u][j]v up[v][j]return up[u][0]优化版本使用 BFS 替代 DFSpythonfrom collections import dequeclass Solution:MOD 10**9 7def assignEdgeWeights(self, edges: List[List[int]], queries: List[List[int]]) - List[int]:n len(edges) 1# 建图graph [[] for _ in range(n)]for u, v in edges:u, v u - 1, v - 1graph[u].append(v)graph[v].append(u)# BFS 预处理深度和父节点LOG (n).bit_length()depth [0] * nup [[0] * LOG for _ in range(n)]q deque([0])visited [False] * nvisited[0] Trueparent [-1] * nwhile q:node q.popleft()for nei in graph[node]:if not visited[nei]:visited[nei] Truedepth[nei] depth[node] 1parent[nei] nodeq.append(nei)# 初始化倍增表for i in range(n):up[i][0] parent[i] if parent[i] ! -1 else ifor j in range(1, LOG):for i in range(n):up[i][j] up[up[i][j-1]][j-1]# 预处理 2 的幂pow2 [1] * (n 1)for i in range(1, n 1):pow2[i] (pow2[i-1] * 2) % self.MOD# 处理查询def lca(u, v):if depth[u] depth[v]:u, v v, u# 提升 vdiff depth[v] - depth[u]j 0while diff:if diff 1:v up[v][j]diff 1j 1if u v:return ufor j in range(LOG - 1, -1, -1):if up[u][j] ! up[v][j]:u up[u][j]v up[v][j]return up[u][0]ans []for u, v in queries:u, v u - 1, v - 1ancestor lca(u, v)dist depth[u] depth[v] - 2 * depth[ancestor]ans.append(0 if dist 0 else pow2[dist - 1])return ans更简洁的实现使用递归 DFSpythonclass Solution:MOD 10**9 7def assignEdgeWeights(self, edges: List[List[int]], queries: List[List[int]]) - List[int]:n len(edges) 1# 建图g [[] for _ in range(n)]for u, v in edges:u, v u - 1, v - 1g[u].append(v)g[v].append(u)# DFS 预处理LOG n.bit_length()depth [0] * nup [[0] * LOG for _ in range(n)]def dfs(node, parent):up[node][0] parent if parent ! -1 else nodefor j in range(1, LOG):up[node][j] up[up[node][j-1]][j-1]for nei in g[node]:if nei ! parent:depth[nei] depth[node] 1dfs(nei, node)dfs(0, -1)# LCA 函数def get_lca(u, v):if depth[u] depth[v]:u, v v, u# 提升 vdiff depth[v] - depth[u]j 0while diff:if diff 1:v up[v][j]diff 1j 1if u v:return ufor j in range(LOG - 1, -1, -1):if up[u][j] ! up[v][j]:u up[u][j]v up[v][j]return up[u][0]# 预处理 2 的幂pow2 [1] * (n 1)for i in range(1, n 1):pow2[i] (pow2[i-1] * 2) % self.MOD# 处理查询return [0 if dist 0 else pow2[dist - 1]for u, v in queriesfor dist in [depth[u-1] depth[v-1] - 2 * depth[get_lca(u-1, v-1)]]]复杂度分析操作 时间复杂度 空间复杂度预处理 O(n log n) O(n log n)单次查询 O(log n) O(1)总体 O((n q) log n) O(n log n)其中 n 为节点数q 为查询数。核心公式证明对于路径长度为 d 的路径每条边可选权重 1 或 2路径总代价为奇数等价于· 路径上有奇数条边权重为 1其余为 2· 从 d 条边中选择奇数条赋值为 1 的方案数组合数公式C(d,1) C(d,3) C(d,5) ... 2^(d-1)因此答案为 2^(d-1)。当 d 0 时即 u v方案数为 0。

相关新闻

TDA2Px SoC异构计算架构与接口调试实战指南

TDA2Px SoC异构计算架构与接口调试实战指南

1. TDA2Px SoC:汽车电子异构计算的集大成者 在汽车电子,尤其是高级驾驶辅助系统(ADAS)领域,性能、功耗和实时性之间的平衡是一场永无止境的博弈。传统的单一架构处理器,无论是通用CPU还是专用DSP&#xff0…

2026/7/15 20:50:13阅读更多 →
GraphQL全功能越权漏洞:从密码重置到系统权限崩塌的深度剖析

GraphQL全功能越权漏洞:从密码重置到系统权限崩塌的深度剖析

1. 从一次“简单”的密码重置漏洞说起最近在做一个内部系统的渗透测试,目标系统采用了 GraphQL 作为 API 接口。一开始,我像往常一样,用自动化工具扫了一遍,报告里弹出了几个“低危”或“中危”的漏洞,其中就包括一个“…

2026/7/15 20:50:13阅读更多 →
【数据结构与算法 | 第一篇】时间复杂度和空间复杂度

【数据结构与算法 | 第一篇】时间复杂度和空间复杂度

前言 学习数据结构与算法,先要分清两个问题:数据怎样组织,操作怎样完成。前者由数据结构解决,后者由算法解决。写代码时,除了得到正确结果,还要关注程序执行要花多少时间、占多少额外空间。 数据结构和算法…

2026/7/15 20:50:13阅读更多 →
【法律人AI提效秘籍】:3步用ChatGPT自动提取判例核心要件,准确率提升92%(实测司法文书库)

【法律人AI提效秘籍】:3步用ChatGPT自动提取判例核心要件,准确率提升92%(实测司法文书库)

更多请点击: https://codechina.net 第一章:ChatGPT整理判例要点的底层逻辑与司法语义适配原理 ChatGPT在判例分析任务中并非简单地执行关键词匹配或模板填充,而是依托三层协同机制实现法律文本的深度理解:领域感知的预训练语义空…

2026/7/15 21:55:20阅读更多 →
需求失焦=成本暴增!用ChatGPT做需求提炼前,必须完成这7项前置可信度校验

需求失焦=成本暴增!用ChatGPT做需求提炼前,必须完成这7项前置可信度校验

更多请点击: https://intelliparadigm.com 第一章:需求失焦的本质与成本失控的底层逻辑 需求失焦并非源于沟通不畅或文档缺失,而是系统性反馈机制失效的结果——当产品演进脱离真实用户行为数据,仅依赖主观假设迭代时&#xff0c…

2026/7/15 21:55:20阅读更多 →
Cesium OGC- wms服务教程

Cesium OGC- wms服务教程

OGC- wms服务 OGC- wms服务 ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 Scene / Camera…

2026/7/15 21:55:20阅读更多 →
C++/OpenCV 配置进阶:从“无法打开源文件”到正确引入opencv_contrib模块

C++/OpenCV 配置进阶:从“无法打开源文件”到正确引入opencv_contrib模块

1. 理解OpenCV核心库与contrib模块的关系第一次接触OpenCV时&#xff0c;很多人都会疑惑为什么有些功能能用而有些功能会报错。比如当你满怀信心地写下#include <opencv2/tracking.hpp>准备实现目标跟踪功能时&#xff0c;编译器却无情地抛出"无法打开源文件"的…

2026/7/15 21:55:20阅读更多 →
【数据挖掘实战】从购物篮到推荐系统:Apriori与FP-Growth算法Python全解析

【数据挖掘实战】从购物篮到推荐系统:Apriori与FP-Growth算法Python全解析

1. 从"啤酒与尿布"说起&#xff1a;频繁模式挖掘的商业价值 1990年代&#xff0c;沃尔玛的工程师在分析销售数据时发现一个有趣现象&#xff1a;啤酒和尿布经常出现在同一张购物小票上。经过调查发现&#xff0c;年轻父亲们常在购买婴儿用品时顺手带走几罐啤酒。这个…

2026/7/15 21:55:20阅读更多 →
遗传算法实战:N皇后问题的Python工程实现与调优

遗传算法实战:N皇后问题的Python工程实现与调优

1. 这不是教科书&#xff0c;而是一次真实的GA工程复盘&#xff1a;从Matlab到Python的N皇后实战手记你点开这篇文章&#xff0c;大概率不是为了背诵“遗传算法是模拟生物进化过程的优化方法”这种定义。你真正想搞懂的是&#xff1a;当一个真实问题——比如100个皇后怎么在100…

2026/7/15 21:50:20阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比&#xff1a;全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时&#xff0c;第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/15 6:42:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件&#xff1a;5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/15 6:12:45阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL&#xff1a;跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/15 10:54:00阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI&#xff0c;最关键的决定是什么&#xff1f;不是选哪家大模型&#xff0c;不是先做哪个场景&#xff0c;不是招多少AI人才——而是选哪个AI开发框架。 为什么&#xff1f;因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前&#xff0c;很多Java企业感到尴尬&#xff1a;大模型的接口是各种语言的&#xff0c;AI开发社区以其他语言为主流&#xff0c;似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述&#xff1a;为什么需要关注CC3230x的SD主机、定时器与低功耗&#xff1f;在物联网和嵌入式设备开发领域&#xff0c;我们常常面临一个核心矛盾&#xff1a;设备需要具备强大的连接能力、可靠的数据存储和实时控制功能&#xff0c;同时又必须严格控制功耗以延长电池…

2026/7/15 0:01:30阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/15 15:50:47阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/15 8:52:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/15 14:06:23阅读更多 →