寻找最富裕的小家庭

题目描述

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。
现给你一颗树,请计算出最富裕的小家庭的财富和。

输入描述

  • 第一行为一个数 N,表示成员总数,成员编号 1~N。1≤N≤1000
  • 第二行为 N 个空格分隔的数,表示编号 1~N 的成员的财富值。0≤财富值≤1000000
  • 接下来 N-1 行,每行两个空格分隔的整数(N1,N2),表示 N1 是 N2 的父节点。

输出描述

最富裕的小家庭的财富和

示例1
输入:

4
100 200 300 500
1 2
1 3
2 4
输出:
700
说明:
成员1,2,3组成的小家庭财富值为600
成员2,4组成的小家庭财富值为700

示例2
输入:

4
100 200 300 500
1 2

1 3

1 4
输出:
1100
说明:
成员1,2,3,4组成的小家庭财富值为1100

public class 最富裕的小家庭12 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] wealth = new int[n + 1];
        int[] family = new int[n + 1];
        for (int i = 1; i < n+1; i++) {
            wealth[i] = sc.nextInt();
            family[i] = wealth[i];
        }
        for (int i = 0; i < n -1; i++) {
            int fa = sc.nextInt();
            int ch = sc.nextInt();
            family[fa] += wealth[ch];
        }
        System.out.println(Arrays.stream(family).max().orElse(0));
    }
}

你可能感兴趣的:(2024年9月华为OD刷题集,算法,java,华为od,面试)