尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSeek    LeetCode 3786. 树组的交互代价总和 Java实现
问题描述给定一棵 n 个节点的无向树节点编号 0 到 n-1以及一个长度相同的数组 groupgroup[i] 表示节点 i 的分组标签。两个节点 u 和 v 若 group[u] group[v]则它们属于同一组。交互代价定义为树上两节点之间唯一路径的边数。要求返回所有同组无序节点对的交互代价总和。核心思路边贡献统计法直接枚举所有同组节点对并计算路径长度时间复杂度为 O(n²)对于 n ≤ 10⁵ 会超时。核心转化总代价 每条边被同组节点对经过的次数之和。对于任意一条边若将其从树中移除树会被分成两部分。假设某组在这条边的一侧子树中有 x 个节点该组总共有 k 个节点则该组中路径经过这条边的节点对数量为 x * (k - x)。因此只需一次 DFS统计每个子树中各分组的节点数量累加每条边的贡献即可。Java 实现javaimport java.util.ArrayList;import java.util.List;class Solution {private long totalCost 0;private int[][] counts; // counts[u][g] 以u为根的子树中分组g的节点数private int[] totalInGroup; // 全树中各分组的总节点数private ListListInteger adj;public long interactionCosts(int n, int[][] edges, int[] group) {// 1. 构建邻接表adj new ArrayList();for (int i 0; i n; i) {adj.add(new ArrayList());}for (int[] edge : edges) {adj.get(edge[0]).add(edge[1]);adj.get(edge[1]).add(edge[0]);}// 2. 统计各分组总节点数分组标签范围为 1 到 20totalInGroup new int[21];for (int g : group) {totalInGroup[g];}// 3. DFS 统计子树中各分组节点数并累加边的贡献counts new int[n][21];dfs(0, -1, group);return totalCost;}private void dfs(int u, int p, int[] group) {// 当前节点自身属于其分组counts[u][group[u]] 1;for (int v : adj.get(u)) {if (v p) continue;dfs(v, u, group);// 对每个分组计算边 (u, v) 的贡献for (int g 1; g 20; g) {if (totalInGroup[g] 2) continue; // 该组不足2个节点无有效节点对long inSubtree counts[v][g]; // 子树v中分组g的节点数long outsideSubtree totalInGroup[g] - inSubtree; // 子树外同组节点数// 该组中路径经过这条边的节点对数量 inSubtree * outsideSubtreetotalCost inSubtree * outsideSubtree;}// 将子树v的统计结果合并到ufor (int g 1; g 20; g) {counts[u][g] counts[v][g];}}}}代码说明1. 数据结构counts[u][g] 存储以 u 为根的子树中分组 g 的节点数量totalInGroup[g] 存储全树中分组 g 的节点总数。2. DFS 遍历从根节点 0 开始递归遍历。对于每个子节点 v先递归处理 v 的子树得到 counts[v][g]。3. 边贡献计算对于边 (u, v)counts[v][g] 是边下方子树中分组 g 的节点数totalInGroup[g] - counts[v][g] 是边上方同组节点数。二者的乘积就是该组中路径经过这条边的节点对数量。4. 结果合并将子树的统计结果累加到父节点 counts[u][g] 中。复杂度分析· 时间复杂度O(n × G)其中 G 是不同分组的数量本题中 G ≤ 20实际为 O(20n)· 空间复杂度O(n × G) 用于存储 counts 数组
RELATED

相关推荐

QueryExcel:三分钟搞定Excel海量数据检索的智能工具

QueryExcel:三分钟搞定Excel海量数据检索的智能工具

QueryExcel:三分钟搞定Excel海量数据检索的智能工具 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 你是否曾面对成百上千个Excel文件,需要查找某个关键信息却无从下手&#xf…

📅 2026/9/18 22:43:35
数据库中一些常用英文单词含义

数据库中一些常用英文单词含义

Schema schema 通常指“结构定义”。 在数据库里,它可能有几层意思: 数据库里的命名空间 比如 PostgreSQL 里可以有: public.users sales.orders这里 public、sales 就是 schema,用来组织表。 表结构 比如一张 users 表有哪些字段…

📅 2026/9/10 3:49:22
BP-AdaBoost参数优化:12种算法对比与Matlab实现

BP-AdaBoost参数优化:12种算法对比与Matlab实现

1. 项目背景与核心价值 在机器学习领域,参数优化一直是提升模型性能的关键环节。BP-AdaBoost作为结合了神经网络与集成学习的混合算法,其参数配置直接影响着模型的预测精度和泛化能力。2024年最新研究表明,通过系统化的算法优化手段&#xff…

📅 2026/8/8 16:36:36
MORE NEWS

更多资讯

📰

Monolith:面向内容推荐场景的轻量级推荐系统——实时捕捉用户兴趣,一步跑通训练与推理

Monolith:面向内容推荐场景的轻量级推荐系统——实时捕捉用户兴趣,一步跑通训练与推理 【免费下载链接】monolith A Lightweight Recommendation System 项目地址: https://gitcode.com/GitHub_Trending/monolith4/monolith 晚上十点半&#xff0…

📰

Ant Design Tree 树形控件入门实战:从 basic 示例掌握展开、选中、勾选与禁用

Ant Design Tree 树形控件入门实战:从 basic 示例掌握展开、选中、勾选与禁用 【免费下载链接】ant-design An enterprise-class UI design language and React UI library 项目地址: https://gitcode.com/gh_mirrors/antde/ant-design 本指南以 Ant Design&…

📰

Windows下PyCharm Ctrl+Alt+L失效的根因与系统级修复方案

1. 这个快捷键失效不是Bug,而是Windows和PyCharm在“抢键盘” 你按下 CtrlAltL,光标纹丝不动,代码没缩进也没重排,PyCharm像没听见一样——这场景我过去三年至少处理过47次,其中32次发生在新装机的第二天,…

📰

Altium Designer导入OrCAD .DSN文件的完整技术指南

1. 项目概述:为什么要把.DSN文件塞进Altium Designer里?你手头有一份OrCAD Capture画好的原理图,后缀是.DSN——这玩意儿不是Altium Designer原生能打开的格式。它本质上是个数据库容器,里面装着.DSN主文件、.OPJ工程配置、.SCH子…

📰

回归测试的本质:缺陷驱动的靶向验证与环境感知

简介:本资源是一份完整的软件回归测试实践报告,面向软件测试工程师、质量保障人员及高校计算机相关专业学生,聚焦于真实政务科普类系统的质量验证场景。报告以丰台科技馆科普互动远程点播系统V1.0为对象,详述了覆盖安装卸载、数字…

📰

esp-iot-solution 的 i2c_bus 组件演进史与源码剖析:从硬件 I2C 到软件 I2C 的完整实践指南

esp-iot-solution 的 i2c_bus 组件演进史与源码剖析:从硬件 I2C 到软件 I2C 的完整实践指南 【免费下载链接】esp-iot-solution Espressif IoT Library. IoT Device Drivers, Documentations and Solutions. 项目地址: https://gitcode.com/GitHub_Trending/es/es…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬