#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; struct unionfind{ vector as, bs; vector ps; vector par, sz; unionfind() {} unionfind(int n):par(n), sz(n, 1), as(n), bs(n), ps(n){ for(int i=0; isz[y]) swap(x, y); par[x]=y; as[y]+=as[x]; bs[y]+=bs[x]; if(ps[y]<0 || ps[x]<0) ps[y]=-1; else ps[y]+=ps[x]; sz[y]+=sz[x]; return true; } bool same(int x, int y){ return find(x)==find(y); } int size(int x){ return sz[find(x)]; } double calc(int x){ x=find(x); if(ps[x]<0) return 0; return (double)(as[x]-bs[x])*(as[x]-bs[x])/ps[x]; } }; int main() { int n; cin>>n; int a[100010], b[100010], p[100010]; for(int i=0; i>a[i]; for(int i=0; i>b[i]; for(int i=0; i>p[i]; int q; cin>>q; unionfind uf(n); for(int i=0; i0) uf.ps[i]=1.0/p[i]; } double ans=0; for(int i=0; i>x>>y; x--; y--; double ans1=ans; ans1-=uf.calc(x); ans1-=uf.calc(y); if(uf.unite(x, y)){ ans1+=uf.calc(x); ans=ans1; } printf("%.9lf\n", ans); } return 0; }