首页 > 其他分享 >华为OD机试C卷(100分)-最富裕的小家庭(C语言)

华为OD机试C卷(100分)-最富裕的小家庭(C语言)

时间:2024-06-23 12:00:39浏览次数:31  
标签:wealth 财富 OD C语言 ## 机试 100 节点 小家庭

## 题目描述

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

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

## 输入描述

第一行为一个数 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 2
1 3
2 4

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

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

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

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

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

上面逻辑中:

wealth[fa] += wealth[ch]

存在问题。

比如下面用例:

5
100 200 300 400 500
3 4
3 5
1 3
1 2

3是1的子节点,但是3的家庭关系先被定义出来了,因此如果将家庭的财富都汇总到父节点身上,上面逻辑会将节点3的财富值变为1200,从而影响后面父节点为1的家庭财富计算。

本题需要额外定义一个family数组,用于记录每个父节点对应家庭的财富值,这样就可以避免上面问题。

#include <stdio.h>
#include <stdlib.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
int main()
{
    int n;
    scanf("%d",&n);
    int wealth[n+1],family[n+1];
    for(int i=1;i<=n;i++){
     scanf("%d",&wealth[i]);
     family[i]=wealth[i];
    }
    for(int i=0;i<n-1;i++){
     int fa,ch;
     scanf("%d %d",&fa,&ch);
     family[fa]+=wealth[ch];
    }
    int max=family[1];
    for(int i=2;i<=n;i++){
     if(family[i]>max)
          max=family[i];
          //max=MAX(max,family[i]);
    }
    printf("%d",max);
    return 0;
}

标签:wealth,财富,OD,C语言,##,机试,100,节点,小家庭
From: https://blog.csdn.net/qq_45721938/article/details/139721494

相关文章

  • UNIQUE VISION Programming Contest 2024 Summer (AtCoder Beginner Contest 359)
    A-CountTakahashi(abc359A)解题思路遍历判断即可神奇的代码#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<map>#include<set>#include<cstring>usingnamespacestd;#defineendl'\n......
  • mongoDB教程(二):下载安装
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • MODEL COMPRESSION VIA DISTILLATION AND QUANTIZATION翻译
    摘要:深度神经网络(DNNs)继续取得重大进展,解决了从图像分类到翻译或增强学习的任务。这个领域的一个受到广泛关注的方面是在资源受限环境中(如移动或嵌入式设备)高效执行深度模型。本文聚焦于这一问题,并提出了两种新的压缩方法,这两种方法共同利用了权重量化和大型网络(称为“教师”网络)......
  • 647. 回文子串(leetcode)
    647.回文子串(leetcode)题目描述给你一个字符串s,请你统计并返回这个字符串中回文子串的数目。回文字符串是正着读和倒过来读一样的字符串。子字符串是字符串中的由连续字符组成的一个序列。示例1输入:s=“abc”输出:3解释:三个回文子串:“a”,“b”,“c”......
  • C语言之字符处理函数
    目录1字符处理函数1.1检查型函数1.1.1检查字符是字母或数字isalnum1.1.2检查字符是否是字母isalpha1.1.3检查字符是否是ASCII码isascii1.1.4检查字符是否是控制字符iscntrl1.1.5检查字符是否是数字字符isdigit1.1.6检查字符是否是可打印字符(不含空格)isgraph1.1.7检查字......
  • LeetCode665.非递减数列
    LeetCode刷题记录文章目录......
  • 大模型基本概念学习 - Checkpoint、PyTorch、 TensorFlow、Transformers、ModelScope
    文章目录前言一、checkpoint二、TensorFlow1.简介2.主要特点3.示例代码三、PyTorch1.简介2.主要特点3.示例代码四、TensorFlow和PyTorch区别五、Transformers六、Transformers通过配置或自动检测来决定使用PyTorch或TensorFlow1.自动检测2.通过环境变量配......
  • C语言之字符串处理函数
    目录1字符串处理函数1.1输入输出1.1.1输出函数puts1.1.2输入函数gets1.2连接函数1.2.1stract1.2.2strncat1.3复制1.3.1复制strcpy1.3.2复制strncpy1.3.3复制memcpy1.3.4指定复制memmove1.3.5指定复制memset1.3.6新建复制strdup1.3.7字符串设定strset1.4比较1.4.1......
  • Leetcode 力扣 125. 验证回文串 (抖音号:708231408)
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,aplan,......
  • Leetcode 力扣 128. 最长连续序列 (抖音号:708231408)
    给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums=......