蓝桥舞会。

题目描述

蓝桥公司一共有 nn 名员工,编号分别为 1∼n1∼n。

他们之间的关系就像一棵以董事长为根的树,父节点就是子节点的直接上司。

每个员工有一个快乐指数 aiai​。

现蓝桥董事会决定举办一场蓝桥舞会来让员工们在工作之余享受美好时光,不过对于每个员工,他们都不愿意与自己的直接上司一起参会。

董事会希望舞会的所有参会员工的快乐指数总和最大,请你求出这个最大值。

输入描述

输入的第一行是一个整数 nn,表示蓝桥公司的员工数。

第二行包含 nn 个整数,分别表示第 ii 个员工的快乐指数 aiai​。

接下来 n−1n−1 行每行包含两个整数 u,vu,v,表示 vv 是 uu 的直接上司。

1≤u,v,ai≤n≤1051≤u,v,ai​≤n≤105​

输出描述

输出一个整数,表示答案。

输入输出样例

示例 1

输入

3
1 2 3
2 1 
3 1 

输出

5
import os  
import sys  
  
# 从输入中读取测试用例的数量  
n = int(input())  
# 从输入中读取n个整数,这些整数存储在一个列表a中  
a = list(map(int, input().split()))  
  
# 注释掉的部分表明原本可能想要对列表a进行降序排序,但这里并未使用  
# a.sort(reverse=True)  
# print(a)  
  
# 创建一个空字典dic,用于存储节点之间的连接关系  
dic = {}  
# 循环n-1次(因为n个节点只需要n-1条边来确定连接关系)  
for i in range(n-1):  
    # 读取两个整数u和v,表示节点u连接到节点v  
    u, v = map(int, input().split())  
    # 将节点u连接到节点v的信息存储在字典dic中  
    # 注意:这里假设了图是有向的,且每个节点只记录一次出边  
    dic[u] = v  
  
# 初始化一个变量sum用于累加所有节点的权重之和(除了直接相连的节点)  
sum = 0  
  
# 遍历字典dic中的所有键(即所有节点)  
for i in dic.keys():  
    # 初始化变量num,用于累加当前节点i不直接相连的节点的权重  
    num = 0  
    # 遍历列表a中的所有节点(索引为j,节点值为a[j])  
    for j in range(n):  
        # 如果节点i不直接连接到节点j+1(因为节点编号从1开始,但索引从0开始),  
        # 并且节点i本身也不是节点j+1,则将节点j+1的权重加到num上  
        if dic.get(i, None) != j + 1 and i != j + 1:  
            num += a[j]  
    # 将num(即节点i不直接相连的节点的权重之和)加到sum上  
    sum += num  
  
# 打印出所有节点不直接相连的节点的权重之和  
print(sum)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vsropy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值