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,pre): ret = S[n] for i in edge[n]: if(i == pre):continue if(S[n] >= S[i]):continue ret = max(ret, dfs(i,n) + S[n]) return ret ans = 0 for i in sorted(range(N), key=lambda x:-S[x]): ans = max(ans,dfs(i,-1)) print(ans)