n = int(input())
h = []
nxs = {}
flag = []
dp = [[0]*2 for _ in range(n)]
for _ in range(n):
flag.append(1)
h.append(int(input()))
for _ in range(n-1):
l, k = map(int, input().split(" "))
if k-1 not in nxs:
nxs[k-1] = []
nxs[k-1].append(l-1)
flag[l-1] = 0
def dfs(i):
global dp
if i in nxs:
for j in nxs[i]:
dfs(j)
dp[i][0] += max(dp[j][0], dp[j][1])
dp[i][1] += dp[j][0]
dp[i][1] += h[i]
for i in range(n):
if flag[i] == 1:
dfs(i)
print(max(dp[i][1], dp[i][0]))
break