from collections import deque N = int(input()) S = list(map(int, input().split())) G = [[] for _ in range(N)] indeg = [0] * N for _ in range(N - 1): a, b = map(int, input().split()) a -= 1 b -= 1 if S[a] > S[b]: G[b].append(a) indeg[a] += 1 if S[a] < S[b]: G[a].append(b) indeg[b] += 1 ret = [0] * N que = deque([]) for i in range(N): if indeg[i] == 0: que.append(i) ret[i] = S[i] while que: x = que.popleft() for nx in G[x]: ret[nx] = max(ret[nx], ret[x] + S[nx]) indeg[nx] -= 1 if indeg[nx] == 0: que.append(nx) print(max(ret))