#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
const int mxn=1e5+5;
set<pair<int,int>>g[mxn];
int p[mxn],sz[mxn];
ll mx[mxn],res;
int fp(int i){
if(i==p[i])return i;
return fp(p[i]);
}
void mrg(int a,int b){
a=fp(a),b=fp(b);
res+=mx[a]+mx[b];
if(sz[a]<sz[b])swap(a,b);
mx[a]=max(mx[a],mx[b]);
sz[a]+=sz[b];
p[b]=a;
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int n;
cin>>n;
int a[n+1];
set<pair<int,int>>s;
for(int i=1;i<=n;i++){
cin>>a[i];
p[i]=i;
sz[i]=1;
mx[i]=a[i];
s.insert({-a[i],i});
}
for(int i=1,u,v;i<n;i++){
cin>>u>>v;
g[u].insert({a[v],v});
g[v].insert({a[u],u});
}
vector<pair<int,int>>e;
while(s.size()){
auto i=s.begin()->S;
s.erase(s.begin());
for(auto j:g[i]){
g[j.S].erase({a[i],i});
e.push_back({i,j.S});
}
}
reverse(e.begin(),e.end());
for(auto i:e){
mrg(i.F,i.S);
// cout<<i.F<<' '<<i.S<<endl;
}
cout<<res;
}