题目描述:在一棵树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的节点被定义为一个小家庭。现给你一棵树,请计算出最富裕的小家庭的财富和。
输入描述:第一行为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是初始化节点财富值的参数。