华为OD统一考试 - 寻找最富裕的小家庭

题目描述

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。

现给你一颗树,请计算出最富裕的小家庭的财富和。

输入描述

第一行为一个数 N,表示成员总数,成员编号 1~N。1 ≤ N ≤ 1000

第二行为 N 个空格分隔的数,表示编号 1~N 的成员的财富值。0 ≤ 财富值 ≤ 1000000

接下来 N -1 行,每行两个空格分隔的整数(N1, N2),表示 N1 是 N2 的父节点。

输出描述

最富裕的小家庭的财富和

用例

输入

4

100 200 300 500

1 2

1 3

2 4

输出

700

说明

成员1,2,3 组成的小家庭财富值为600

成员2,4 组成的小家庭财富值为700

题目解析

简单的逻辑分析题。

由于题目输入会给出 树形结构 中,父节点->子节点 的信息,比如下面红色部分

4

100 200 300 500

1 21 32 4

因此我们遍历这些信息时,就可以直接将子节点的财富,汇总到其父节点上。

具体实现是,由第二行输入解析得到每个节点的财富值数组 wealth。

然后根据第三行~最后一行的输入:fa ch,执行 wealth[fa] += wealth[ch],即将子节点的财富值汇总到父节点上。

这样最终wealth数组的最大值就是题解。

需要注意的是,题目规定成员编号 1~N,因此定义wealth数组时,我们应该将其长度定义为N+1,且从索引1开始操作,来匹配成员编号1~N。

2023.11.26 上面逻辑中:

wealth[fa] += wealth[ch]

存在问题。

比如

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试卷题 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论
华为OD统一考试 - 寻找最富裕的小家庭
点赞 回复 分享
发布于 2024-09-20 21:12 四川

相关推荐

双非本科小鼠:27兄弟,不应该还在享受校园吗哈哈😂
点赞 评论 收藏
分享
北斗导航Compass低仿版:没必要写这么多东西,还是尽量浓缩成一页,自我评价,git和cursor Trae这些都可以去掉。实习经历的描述最好根据star法则改一下,别这么直白
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务