#include <iostream>
#include<bits/stdc++.h>

using namespace std;
typedef long long int ll;

void dfs(int node , vector<int> g[] , vector<int> &visited , vector<int> &parent,vector<int> &b,vector<int> &sum){
	visited[node]=1;
	for(auto it : g[node]){
		
	if(visited[it]==0){
		parent[it]=node;
		dfs(it,g,visited,parent,b,sum);
	}
		
	}
	
	int s=0;
	for(auto it : g[node]){
		if(parent[node]!=it){
			s=s+sum[it];
			
		}
	}
	
	sum[node] = b[node] + s;
	
}

int main() {
	// your code goes here
	
	int n;
	cin>>n;
	vector<int> g[n+1];
	
		vector<int> b(n+1);
	for(int i=1;i<=n;i++){
		cin>>b[i];
		
	}
	
	
	for(int i=1;i<=n-1;i++){
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
		
	}
	

	
	vector<int> visited(n+1,0);
	vector<int> parent(n+1,-1);
	vector<int> sum(n+1,0);
	dfs(1,g,visited,parent,b,sum);
	
	int answer=0;
	for(int i=1;i<=n;i++){
		answer=max(answer,sum[i]);
		
	}
	
	cout<<answer;
	
	
	return 0;
}