#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e5 + 5;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
long long sq(long long x) { return (x * x) % MOD; }
long long modP(long long a, long long b) {
  return (!b ? 1 : (sq(modP(a, b / 2)) * (b % 2 ? a : 1)) % MOD);
}
long double ans = 0.0;
int n, s[maxN], e[maxN], sz[maxN];
long long totS = 0, totE = 0;
vector<int> G[maxN];
int DFS(int v = 1, int p = -1) {
  sz[v] = 1;
  long long ret = 0;
  long long res = 0;
  for (auto u : G[v]) {
    if (u == p) continue;
    int tmp = DFS(u, v);
    sz[v] += sz[u];
    ret += tmp;
    res += 1ll * tmp * sz[u];
  }
  ret += s[v];
  res += 1ll * (n - sz[v]) * (totS - ret);
  ans += 1ll * res * e[v];
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", s + i, e + i);
    totS += s[i];
    totE += e[i];
  }
  DFS();
  printf("%.10Lf", ans / (1ll * totS * totE));
  return 0;
}
