from collections import deque N = int(input()) S = list(map(int, input().split())) G = [[] for _ in range(N)] cnt = [0]*N for _ in range(N-1): u, v = map(int, input().split()) u, v = u-1, v-1 if S[u] < S[v]: G[u].append(v) cnt[v] += 1 elif S[v] < S[u]: G[v].append(u) cnt[u] += 1 que = deque() for i in range(N): if cnt[i] == 0: que.append(i) order = [] while que: n = que.popleft() order.append(n) for v in G[n]: cnt[v] -= 1 if cnt[v] == 0: que.append(v) dp = S[:] for n in order: for v in G[n]: dp[v] = max(dp[v], dp[n]+S[v]) print(max(dp))