华为OD机试题-寻找最富裕的小家庭(python版)-分值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

# 定义一个TreeNode类
class TreeNode:
  def _init_(self,wealth):
    self.wealth=wealth    # 两个属性值
    self.children=[]
# 创建一个树结构
  def build _tree_ and _calculate_wealth(N,wealth_values,connections):
    members = [TreeNode(wealth) for wealth in wealth_value] # 创建N个TreeNode对象
# 遍历家庭成员列表,将每个孩子添加到其父母的子节点下    
    for parent,child in connections:  
      members[parent-1].children.append(members[child-1]) 
# 遍历members列表,计算每个节点及其直接相邻子节点的财富值的总和
    for member in members: 
      member.wealth += sum(child.wealth for child in members.children)
# 找到所有节点中的最大财富值
      max_wealth = max(member.wealth for menber in members)
      return max_wealth
# 输入,输出
N = int(input())
wealth_value = list(map(int,input().split()))
connections = [map(int,input().split()) for _ in range(N - 1)]
result = build _tree_ and calculate_wealth(N,wealth_value,connections)
print(result)

上述代码中,定义类中的_init_方法: 是一个特殊的方法,用于定义类的从初始化。每当创建一个类的新实例时,该方法都会被自动调用。其中的两个参数:self(指向实例本身的引用,在定义类方法中必须包含),wealth是初始化节点财富值的参数。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值