import sys from functools import cache sys.setrecursionlimit(2 * 10**5 + 10) N = int(input()) S = [int(s) for s in input().split()] tree = [[] for _ in range(N)] for _ in range(N - 1): u, v = [int(s) - 1 for s in input().split()] tree[u].append(v) tree[v].append(u) order = sorted([*range(N)], key=lambda i: S[i]) @cache def dp(v): res = 0 for to in tree[v]: if S[to] <= S[v]: continue res = max(res, dp(to)) return res + S[v] ans = 0 for i in order: ans = max(ans, dp(i)) print(ans)