#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
struct tree{
int fa;
int sum;
double wei;
int size;
bool vis = false;
};
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,r;
while(cin>>n>>r){
if(n == 0 && r == 0) return 0;
tree a[N];
int w[N];
int ans = 0;
for(int i=1;i<=n;i++){
cin>>w[i];
a[i].wei = w[i];
a[i].sum = w[i];
ans += w[i];
a[i].size = 1;
}
for(int i=0;i<n - 1;i++){
int u,v;
cin>>u>>v;
a[v].fa = u;
}
for(int k=0;k<n;k++){
double maxwei = 0;
int maxi = 0;
for(int i=1;i<=n;i++){
if(a[i].fa && !a[i].vis && a[i].wei > maxwei){
maxwei = a[i].wei;
maxi = i;
}
}
a[maxi].vis = true;
ans += a[maxi].sum * a[a[maxi].fa].size;
for(int i=1;i<=n;i++){
if(a[i].fa == maxi){
a[i].fa = a[maxi].fa;
}
}
a[a[maxi].fa].sum += a[maxi].sum;
a[a[maxi].fa].size += a[maxi].size;
a[a[maxi].fa].wei = double(a[a[maxi].fa].sum * 1.0) / double(a[a[maxi].fa].size * 1.0);
}
cout<<ans<<'\n';
}
return 0;
}