首页 > 其他分享 >最富裕的小家庭

最富裕的小家庭

时间:2024-07-19 13:54:43浏览次数:13  
标签:family fMoneySet int familyMap moneyArr 富裕 child 小家庭

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

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

输入描述
第一行为一个数 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
 

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeSet;

/**
 * <h1>最富裕的小家庭</h1>
 */
public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        while (in.hasNext()) {

            // 成员总数
            String input = in.nextLine();
            int n = Integer.parseInt(input);

            // 成员财富值数组
            String money = in.nextLine();
            int[] moneyArr = Arrays.stream(money.split("\\s+")).mapToInt(Integer::parseInt).toArray();


            // 用来存储每个家庭
            HashMap<Integer, int[]> familyMap = new HashMap<>();

            for (int i = 0; i < n - 1; i++) {
                int[] family = Arrays.stream(in.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
                Integer p = family[0];
                Integer c = family[1];
                if (familyMap.containsKey(p)) {
                    int[] child = familyMap.get(p);
                    child[1] = c;
                } else {
                    int[] child = {c, -1};
                    familyMap.put(p, child);
                }
            }
            TreeSet<Integer> fMoneySet = familyCalculator(familyMap, moneyArr);
            System.out.println(fMoneySet.last());
        }
    }

    private static TreeSet<Integer> familyCalculator(HashMap<Integer, int[]> familyMap, int[] moneyArr) {
        // 用来存储每个家庭的财富值
        TreeSet<Integer> fMoneySet = new TreeSet<>();
        for (Map.Entry<Integer, int[]> family : familyMap.entrySet()) {
            int[] child = family.getValue();
            if (child[1] == -1) {
                // 只有一个子节点
                fMoneySet.add(moneyArr[family.getKey() - 1] + moneyArr[child[0] - 1]);
            } else {
                // 有两个子节点
                fMoneySet.add(moneyArr[family.getKey() - 1] + moneyArr[child[0] - 1] + moneyArr[child[1] - 1]);
            }
        }
        return fMoneySet;
    }
}

标签:family,fMoneySet,int,familyMap,moneyArr,富裕,child,小家庭
From: https://blog.csdn.net/J1e_Sir/article/details/140525985

相关文章

  • 华为OD机试D卷 --最富裕的小家庭--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析算法源码题目描述在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。输入描述第一行为一......
  • 华为OD机试C卷(100分)-最富裕的小家庭(C语言)
    ##题目描述在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。##输入描述第一行为一个数N,表示成员总数,成员编号1~N。1≤N≤1000第二行为N个空格......
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最富裕的小家庭(100分) - 三语言AC
    ......
  • 【视频讲解】偏最小二乘结构方程模型PLS-SEM分析白茶产业数字化对共同富裕的影响
    全文链接:https://tecdat.cn/?p=36314原文出处:拓端数据部落公众号本文将通过视频讲解,展示如何用偏最小二乘结构方程模型PLS-SEM分析白茶产业数字化对共同富裕的影响,并结合Python用偏最小二乘回归PartialLeastSquares,PLS分析桃子近红外光谱数据可视化实例和R语言结构方程模型SEM......
  • 论共同富裕
     共同富裕是社会主义发展的方向,实现共同富裕对于公民的素质和信仰的要求是非常高的,如果能达到人人能为其他所有人的共同富裕而赴汤蹈火,那么即使没有达到真正的共同富裕,我想那一天也不远了。 要想实现共同富裕,首先必须重视思想道德教育,当今社会,世风已经接近价值观扭曲的程度了......
  • 不断推进人类共同富裕——论文文档
    新发展阶段奋力实现共同富裕的奋斗目标“十四五”期间,我国即将步入新的发展阶段,仍须不忘本心,不断向共同富裕目标前进。第一,要坚持发展生产力和变革生产关系并行不悖。首先,发展生产力,也就是为实现共同富裕奠定雄厚物质基础首先要做大“蛋糕”。改革开放以来,我国经济实力、综合国力......