救一下啊
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x,y,ans1,ans2,p[111111],c[111111],f[2][111111],fs[2];
vector<int> v[111111],s[111111],rs;
queue<int> q;
double k;
void Dfs(int rt){
f[0][rt]=0,f[1][rt]=p[rt];
for(int i=0;i<s[rt].size();i++){
int sn=s[rt][i];
Dfs(sn);
f[0][rt]+=max(f[0][sn],f[1][sn]);
f[1][rt]+=f[0][sn];
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
cin>>x>>y;
x++,y++;
v[x].push_back(y);
v[y].push_back(x);
c[x]++,c[y]++;
}
cin>>k;
for(int i=1;i<=n;i++){
if(c[i]==1){
q.push(i);
}
}
while(!q.empty()){
int qs=q.front();
q.pop();
for(int i=0;i<v[qs].size();i++){
int N=v[qs][i];
c[N]--;
if(c[N]>0){
if(c[N]==1) q.push(N);
s[N].push_back(qs);
}
}
}
for(int i=1;i<=n;i++){
if(c[i]<2) continue;
rs.push_back(i);
Dfs(i);
}
fs[0]=f[0][rs[0]],fs[1]=-1145141919;
for(int i=1;i<rs.size();i++){
int fs0=max(fs[0],fs[1])+f[0][rs[i]],fs1=fs[0]+f[1][rs[i]];
fs[0]=fs0,fs[1]=fs1;
}
ans1=max(fs[0],fs[1]);
fs[0]=-1145141919,fs[1]=f[1][rs[0]];
for(int i=1;i<rs.size();i++){
int fs0=max(fs[0],fs[1])+f[0][rs[i]],fs1=fs[0]+f[1][rs[i]];
fs[0]=fs0,fs[1]=fs1;
}
ans2=fs[0];
cout<<fixed<<setprecision(1)<<k*max(ans1,ans2);
}