#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define S second
#define F first
#define int long long

const int N = 2e5+3;
int dp[N][3], cns[N][3];
int a[N];
vector<int> g[N];

void dfs(int v, int p){
    dp[v][0]=a[v];
    if(g[v].size()==1 && p==g[v][0])dp[v][1]=a[v];
    for(int i=0; i < g[v].size(); i++){
        int to = g[v][i];
        if(to!=p){
            dfs(to, v);
            dp[v][0]+=min(dp[to][2], min(dp[to][1], dp[to][0]));
            dp[v][1]+=dp[to][0];
            dp[v][2]+=dp[to][1];
        }
    }
}

void solve(){
   int n;
   cin >> n;
   int mn=1e18;
   int mnind=0;
   for(int i=1; i<=n; i++){
        cin >> a[i];
        mn=min(mn, a[i]);
        if(a[i]==mn)mnind=i;
   }
   for(int i=0; i<n-1; i++){
        int u, v;
        cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }
    /*
    dfs(1, 1);
    int ans = min(dp[1][0], dp[1][1]);
    cout << ans << '\n';
    */
    if(g[1].size()==n-1){
        cout << a[1] << '\n' << 1 << '\n' << 1 << '\n' << 0 << '\n';
        return;
    }
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    solve();
}