改过很多次特判均无果
#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5+10;
int n;
struct node{
int v;
double w;
};
vector<node>vec[maxn];
double a[maxn],dp[maxn],ans;//dp[x]+=(1-dp[x])*w*dp[to]
void init(int x,int fa){
dp[x]=a[x];
for(auto too:vec[x]){
int to = too.v;
double w = too.w;
if(to==fa)continue;
init(to,x);
dp[x]+=(1-dp[x])*w*dp[to];
}
}
void dfs(int x,int fa){
ans+=dp[x];
for(auto too:vec[x]){
int to = too.v;
double w = too.w;
if(to==fa)continue;
if(fabs(w*dp[to]-1.0)<1e-7){
dfs(to,x);
continue;
}
dp[x]=(w*dp[to]-dp[x])/(w*dp[to]-1.0);
dp[to]=dp[to]+(1-dp[to])*w*dp[x];
dfs(to,x);
dp[to]=(w*dp[x]-dp[to])/(w*dp[x]-1.0);
dp[x]=dp[x]+(1-dp[x])*w*dp[to];
}
}
int main(){
cin>>n;
for(int i = 1,u,v,w;i<n;i++){
cin>>u>>v>>w;
vec[u].push_back({v,w/100.0});
vec[v].push_back({u,w/100.0});
}
for(int i = 1;i<=n;i++){
cin>>a[i];a[i]/=100.0;
}
init(1,0);
dfs(1,0);
printf("%.6lf",ans);
}