import sys input = sys.stdin.readline N = int(input()) S = list(map(int,input().split())) AB = [tuple(map(int,input().split())) for _ in range(N-1)] G = [[] for _ in range(N)] indeg = [0]*N for a,b in AB: a,b = a-1,b-1 if S[a] > S[b]: G[a].append(b) indeg[b] += 1 elif S[a] < S[b]: G[b].append(a) indeg[a] += 1 from collections import deque q = deque() score = S[:] for i in range(N): if indeg[i]==0: q.append(i) while q: v = q.popleft() for to in G[v]: indeg[to] -= 1 score[to] = max(score[to], score[v] + S[to]) if indeg[to] == 0: q.append(to) print(max(score))