DeepSeek    LeetCode 3786. 树组的交互代价总和 Python3实现
问题描述给定一棵 n 个节点的无向树节点编号 0 到 n-1数组 group[i] 表示节点 i 所属的分组。两个节点 u 和 v 的交互代价为树上它们之间唯一路径的边数。要求返回所有同组无序节点对的交互代价总和。核心思路边贡献统计直接枚举所有同组节点对并计算路径长度会达到 O(n²)不可行。关键转化总代价等于每条边被同组节点对的路径经过的次数之和。对于任意一条边将其从树中删除会把树分成两部分。假设某一分组在这条边一侧子树中有 x 个节点该组全局总数为 k那么该组中路径经过这条边的节点对数量为 x * (k - x)。因此只需一次 DFS 遍历统计每个子树中各分组的节点数然后累加每条边的贡献即可。Python3 实现pythonfrom typing import Listclass Solution:def interactionCosts(self, n: int, edges: List[List[int]], group: List[int]) - int:# 1. 构建邻接表adj [[] for _ in range(n)]for u, v in edges:adj[u].append(v)adj[v].append(u)# 2. 离散化分组标签若分组标签本身连续且范围小可直接用数组unique_groups sorted(set(group))g_to_idx {g: i for i, g in enumerate(unique_groups)}m len(unique_groups) # 不同分组的数量group_idx [g_to_idx[g] for g in group] # 转为紧凑索引# 3. 统计全局每个分组的节点总数total [0] * mfor gi in group_idx:total[gi] 1# 4. counts[u][gi] 以 u 为根的子树中分组 gi 的节点数counts [[0] * m for _ in range(n)]self.ans 0import syssys.setrecursionlimit(1000000) # 防止递归深度过大def dfs(u: int, p: int) - None:counts[u][group_idx[u]] 1 # 当前节点自身for v in adj[u]:if v p:continuedfs(v, u)# 计算边 (u, v) 对答案的贡献for gi in range(m):if total[gi] 2: # 该组至少两个节点才可能产生贡献c counts[v][gi] # 子树 v 中该组节点数if c 0:self.ans c * (total[gi] - c)# 合并子树的统计信息到 ufor gi in range(m):counts[u][gi] counts[v][gi]dfs(0, -1)return self.ans代码详解1. 离散化处理由于分组标签可能不连续或很大先用 set 收集所有标签并映射为 0..m-1 的整数使后续数组操作高效且紧凑。2. 全局统计total[gi] 记录整个树中分组 gi 的节点总数。3. DFS 遍历从根节点 0 开始递归。对于节点 u· 初始化 counts[u][group_idx[u]] 1。· 遍历每个子节点 v先递归处理 v。· 对每一个分组 gi子树 v 中该组的节点数为 counts[v][gi]则该组中路径经过边 (u, v) 的节点对数为 counts[v][gi] * (total[gi] - counts[v][gi])累加到答案。· 将 v 的计数合并到 u 的计数中。4. 复杂度分析· 时间复杂度O(n · m)其中 m 为不同分组的数量通常很小如题目中 ≤ 20。· 空间复杂度O(n · m) 用于存储子树计数数组加上 O(n) 的邻接表。5. 注意事项· 递归深度可能达到 n已设置 sys.setrecursionlimit 以避免栈溢出。· 若分组标签范围很小例如 1~20可省去离散化步骤直接使用固定大小的数组代码更简洁。测试示例供参考python# 示例# n 4, edges [[0,1],[0,2],[2,3]], group [1,2,1,2]# 同组节点对组1: (0,2) 路径长度 1组2: (1,3) 路径长度 2 → 总和 3sol Solution()print(sol.interactionCosts(4, [[0,1],[0,2],[2,3]], [1,2,1,2])) # 输出 3本解法充分利用了“边贡献”思想将路径总长转化为对每条边的独立贡献并通过一次 DFS 高效完成统计。

相关新闻

工业自动化PLC通讯协议全解析:从Modbus到Profinet实战指南

工业自动化PLC通讯协议全解析:从Modbus到Profinet实战指南

1. PLC通讯方式:工业自动化系统的“神经网络”解析 在工业自动化领域,PLC(可编程逻辑控制器)被誉为“工业大脑”,负责执行逻辑运算、顺序控制、定时、计数等指令,驱动现场设备。然而,一个“大脑…

2026/9/28 23:52:20 阅读更多 →
让 AI 用你的账号工作:Ace Data Cloud Connector 多平台内容营销实战

让 AI 用你的账号工作:Ace Data Cloud Connector 多平台内容营销实战

让 AI 用你的账号工作:Ace Data Cloud Connector 如何把内容营销变成自动化流水线? 做 AI 产品、API 服务或技术工具推广时,很多人都会卡在同一个问题上: 内容不是不会写,而是写完之后,还要排版、配图、登…

2026/9/29 9:53:12 阅读更多 →
RAG+Agent知识管理系统常见失败原因与优化实践

RAG+Agent知识管理系统常见失败原因与优化实践

1. 为什么RAGAgent的知识管理方案容易失败在AI工程化落地的过程中,RAG(检索增强生成)与Agent技术的结合被许多团队视为知识管理的"银弹"。但实际落地时,我们团队踩过的坑可能比成功经验还多。最近三个月,我深…

2026/10/11 2:47:31 阅读更多 →

最新新闻

LeetCode 543:二叉树直径的高效解法与JS实现

LeetCode 543:二叉树直径的高效解法与JS实现

1. 题目理解与需求分析今天要解决的是LeetCode第543题"二叉树的直径"。这是一道经典的二叉树遍历问题,题目描述很简单:给定一棵二叉树,你需要计算它的直径长度。二叉树的直径是指树中任意两个结点间最长路径的长度,这条…

2026/10/14 0:50:56 阅读更多 →
Python爬虫实战:漏洞库数据抓取与MySQL入库全流程

Python爬虫实战:漏洞库数据抓取与MySQL入库全流程

简介:这是一份面向网络安全初学者与Python爬虫实践者的综合项目源码包,围绕CNVD、CNNVD、CVE三大权威漏洞库的数据采集、存储与可视化展开,适合想打通爬虫、数据库与GUI开发链路的学习者。包内共72个文件,以py脚本、toc与spec打包…

2026/10/14 0:50:56 阅读更多 →
虚拟商城系统模块化拼装:八套模块选型与支付交付实战

虚拟商城系统模块化拼装:八套模块选型与支付交付实战

简介:友价在线虚拟商城最新版是一套面向源码交易、域名交易等虚拟商品买卖场景的综合性电商系统,适合个人站长、开发者及中小团队快速搭建可运营的交易平台。系统采用模块化设计,涵盖商品管理、订单处理、用户管理、支付接口集成与安全保障等…

2026/10/14 0:50:56 阅读更多 →
Python 3.6.5 Linux离线安装全攻略:从依赖到虚拟环境

Python 3.6.5 Linux离线安装全攻略:从依赖到虚拟环境

简介:这份资源是面向Linux离线环境的Python 3.6.5集成安装包,专为内网服务器、无外网权限或需要快速搭建Python开发环境的用户准备。包内已集成NumPy、Pandas、TensorFlow 1.10等科学计算与机器学习库,Django 2.1、djangorestframework 3.8、…

2026/10/14 0:50:56 阅读更多 →
课堂行为检测数据集VOC+YOLO双格式解析与训练避坑指南

课堂行为检测数据集VOC+YOLO双格式解析与训练避坑指南

简介:一份面向学生课堂行为检测的VOCYOLO格式数据集,整体覆盖5622张图片、7个行为类别(dk、dx、js、tt、xt、zl、zt),适合目标检测学习者及教育AI研究者用于课堂行为识别模型训练与评测,整体设计贴近真实教…

2026/10/14 0:50:56 阅读更多 →
51单片机矩阵键盘与数码管动态显示:完整电路、代码与调试指南

51单片机矩阵键盘与数码管动态显示:完整电路、代码与调试指南

矩阵键盘按键识别加数码管动态显示,这个组合在51单片机学习里属于“怎么绕都绕不开”的项目之一。很多人第一次看到“矩阵键盘”“数码管”“动态显示”这几个词凑在一起就有点慌,觉得既要读键盘又要刷新屏幕,逻辑会不会很乱。其实这个项目的…

2026/10/14 0:49:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →