DeepSeek    LeetCode 3559. 给边赋权值的方案数 II Java实现 根据题目要求对于树中任意两个节点 u 和 v路径长度为 d边数使路径总代价为奇数的赋值方案数为 2^(d-1)。因此核心问题转化为快速求树上两点距离。以下是 Java 实现使用二进制提升Binary Lifting 求 LCA预处理 O(n log n)单次查询 O(log n)javaclass Solution {private static final int MOD 1_000_000_007;private ListListInteger graph;private int[] depth;private int[][] up;public int[] assignEdgeWeights(int[][] edges, int[][] queries) {int n edges.length 1;// 1. 建图graph new ArrayList();for (int i 0; i n; i) graph.add(new ArrayList());for (int[] e : edges) {int u e[0] - 1, v e[1] - 1;graph.get(u).add(v);graph.get(v).add(u);}// 2. 预处理深度 倍增表int LOG 32 - Integer.numberOfLeadingZeros(n); // ceil(log2(n)) 1depth new int[n];up new int[n][LOG];dfs(0, -1);// 3. 预处理 2 的幂次int[] pow2 new int[n 1];pow2[0] 1;for (int i 1; i n; i) {pow2[i] (int)((long)pow2[i - 1] * 2 % MOD);}// 4. 处理每个查询int q queries.length;int[] ans new int[q];for (int i 0; i q; i) {int u queries[i][0] - 1, v queries[i][1] - 1;int lca findLca(u, v);int dist depth[u] depth[v] - 2 * depth[lca];ans[i] dist 0 ? 0 : pow2[dist - 1];}return ans;}// DFS 构建深度和倍增表private void dfs(int node, int parent) {up[node][0] parent -1 ? node : parent;for (int j 1; j up[0].length; j) {up[node][j] up[up[node][j - 1]][j - 1];}for (int nei : graph.get(node)) {if (nei parent) continue;depth[nei] depth[node] 1;dfs(nei, node);}}// 将节点向上提升 diff 步private int lift(int node, int diff) {for (int j 0; diff 0; j, diff 1) {if ((diff 1) 1) node up[node][j];}return node;}// 求 LCAprivate int findLca(int u, int v) {if (depth[u] depth[v]) {int tmp u; u v; v tmp;}v lift(v, depth[v] - depth[u]);if (u v) return u;for (int j up[0].length - 1; j 0; j--) {if (up[u][j] ! up[v][j]) {u up[u][j];v up[v][j];}}return up[u][0];}}复杂度分析· 时间复杂度预处理 O(n log n)每个查询 O(log n)· 空间复杂度O(n log n)核心思路补充为什么答案是 2^(d-1)路径上 d 条边每条可选 1 或 2。要让总和为奇数等价于从 d 条边中选奇数条赋值为 1其余为 2。d 个元素中选奇数个的组合数之和 2^(d-1)。

相关新闻

最新新闻

MATLAB本地统计阴影校正工具:含核心local.m函数与测试脚本,支持灰度/RGB图像一键处理

MATLAB本地统计阴影校正工具:含核心local.m函数与测试脚本,支持灰度/RGB图像一键处理

本文还有配套的精品资源,点击获取 简介:一套开箱即用的MATLAB阴影校正方案,核心是local.m函数,通过计算图像局部均值与标准差识别阴影区域,并进行自适应亮度补偿;配套testlocal.m脚本可直接运行演示&…

2026/7/15 22:15:03
STM32H503CB搭配VL53L1CB的可配置TOF测距工程:支持多档距离与采样率调节

STM32H503CB搭配VL53L1CB的可配置TOF测距工程:支持多档距离与采样率调节

本文还有配套的精品资源,点击获取 简介:基于STM32H503CB微控制器和VL53L1CB飞行时间传感器的完整嵌入式测距工程,已集成I2C底层驱动、TOF初始化、校准流程及实时距离读取功能。工程采用标准HAL架构组织,包含Drivers、Core、Src…

2026/7/15 22:15:03
五种经典CNN模型Python实现合集:LeNet5/VGG/ResNet/GoogLeNet/DenseNet,含MNIST与猫狗数据集完整训练代码

五种经典CNN模型Python实现合集:LeNet5/VGG/ResNet/GoogLeNet/DenseNet,含MNIST与猫狗数据集完整训练代码

本文还有配套的精品资源,点击获取 简介:直接可用的五种主流卷积神经网络PyTorch/TensorFlow实现:LeNet5、VGGNet、ResNet、GoogleNet和DenseNet,每个模型都配有独立可运行脚本(.py),支持MNIS…

2026/7/15 22:15:03
Python自动驾驶图像识别完整实战教程(OpenCV+YOLOv8,附可直接运行源码)

Python自动驾驶图像识别完整实战教程(OpenCV+YOLOv8,附可直接运行源码)

文章目录一、技术方案整体介绍用到依赖库说明二、开发环境搭建三、实战一:OpenCV实现车道线检测(基础入门)使用说明常见问题优化四、实战二:YOLOv8实现道路目标检测(识别车辆、行人、红绿灯)五、实战三&…

2026/7/15 22:15:03
自定义 Metrics 设计规范:业务指标和技术指标的层级划分

自定义 Metrics 设计规范:业务指标和技术指标的层级划分

自定义 Metrics 设计规范:业务指标和技术指标的层级划分 一、"监控面板 80 个指标,但故障时不知道看哪个" 运维团队花了两个月建了监控系统,各种指标应有尽有:GC 次数、线程数、文件描述符、内存碎片率、连接池使用率…

2026/7/15 22:15:03
MATLAB写的线弹性结构动力响应仿真脚本,含悬臂梁算例和时域求解器

MATLAB写的线弹性结构动力响应仿真脚本,含悬臂梁算例和时域求解器

本文还有配套的精品资源,点击获取 简介:一套纯MATLAB脚本实现的线弹性体动态响应有限元仿真工具,不依赖PDE Toolbox,支持二维和三维结构在阶跃力、正弦载荷等动态激励下的位移、应力和加速度计算。核心函数linelast_dynamicFEM…

2026/7/15 22:10:03

月新闻