import pypyjit pypyjit.set_param("max_unroll_recursion=-1") import sys sys.setrecursionlimit(2*10**5+100) from functools import cache N = int(input()) S = list(map(int,input().split())) edge = [[] for _ in range(N)] for _ in range(N-1): a,b = list(map(int,input().split())) a -= 1;b -= 1 edge[a].append(b) edge[b].append(a) @cache def dfs(n): ret = S[n] for i in edge[n]: if(S[n] >= S[i]):continue ret = max(ret, dfs(i) + S[n]) return ret ans = 0 for i in range(N): ans = max(ans,dfs(i)) print(ans)