小红面对一棵带边权的树,每个节点都有一个非负收益。她可以选择任意节点放置一枚影响半径为 k 的装置,与放置点的树上距离不超过 k 的所有节点都会贡献收益。 请选择放置点,使总收益最大。
第一行输入节点数 n 和影响半径 k 。 第二行输入 n 个整数 g_0,g_1,...,g_n-1 。 接下来 n-1 行,每行输入 u,v,d ,表示节点 u,v 之间有一条长度为 d 的边。 保证 1 ≤ n ≤ 100 , 1 ≤ k ≤ 10^8 , 0 ≤ g_i,d ≤ 10^5 ,输入图是一棵树。
输出能够获得的最大总收益。
7 3 10 10 10 300 10 10 300 0 1 1 0 2 1 1 3 3 1 4 1 2 5 3 2 6 1
640
5 2 200 100 250 100 100 1 0 20 0 2 20 3 1 2 4 1 2
300
考点:树
数据规模 n ≤ 100 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:树
本题切入点
n≤100 极小,直接枚举放置点:对每个候选点从它出发 DFS 累加树上距离 ≤k 的节点收益取最大(也可用换根 DP 降到 O(n))。
树结构上的遍历(DFS 求子树信息 / BFS 求层序),多数树题是「后序遍历 + 回溯」。
思路框架(树 通法 · 非本题专属)
实现要点:递归深度可能到 1e5,注意递归爆栈;必要时改迭代或调整递归深度。
复杂度:时间 O(n) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1:输入 7 3 / 10 10 10 300 10 10 300 / 0 1 1 / 0 2 1 / 1 3 3 / 1 4 1 / 2 5 3 / 2 6 1 → 输出 640
选择合适节点后,半径范围内节点收益之和为 640。
样例 2:输入 5 2 / 200 100 250 100 100 / 1 0 20 / 0 2 20 / 3 1 2 / 4 1 2 → 输出 300
最优放置点可覆盖收益总和为 300 的节点集合。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-06月03号开发岗。