#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
double k;
int a[100005];
int father[100005];
vector<int> ljb[100005];
int dp[100005][2];
bool flag;
int r[100005];
int find(int x){
if(father[x]==x){
return x;
}
return father[x]=find(father[x]);
}
void unionn(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx==fy){
flag=true;
return;
}
father[fx]=fy;
return;
}
void dfs(int i,int fa){
dp[i][0]=0;
dp[i][1]=a[i];
for(int j=0;j<ljb[i].size();j++){
int v=ljb[i][j];
if(v==fa){
continue;
}
dfs(v,i);
dp[i][1]+=dp[v][0];
dp[i][0]+=max(dp[v][0],dp[v][1]);
}
return;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
father[i]=i;
}
for(int i=1;i<=n;i++){
flag=false;
int x,y;
scanf("%lld%lld",&x,&y);
x++;y++;
unionn(x,y);
if(flag){
// puts("");
continue;
}
ljb[x].push_back(y);
ljb[y].push_back(x);
// r[x]++;r[y]++;
}
scanf("%lf",&k);
dfs(1,0);
printf("%0.1lf",k*(max(dp[1][0],dp[1][1])));
return 0;
}
感觉是小数最后一位被卡了一下/kk