#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target( \
    "sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
using namespace std;
namespace cst {
const double pi = acos(-1.0);
const int MIN_INT8 = -128;
const int MIN_INT16 = -32768;
const int MIN_INT = -2147483647 - 1;
const long long MIN_LL = -9223372036854775807LL - 1;
const int MAX_INT8 = 127;
const int MAX_INT16 = 32767;
const int MAX_INT = 2147483647;
const long long MAX_LL = 9223372036854775807LL;
}  // namespace cst
namespace t {
template <typename T>
inline const T gcd(T m, T n) {
  while (n != 0) {
    T t = m % n;
    m = n;
    n = t;
  }
  return m;
}
template <typename T>
inline const T max(const T &a, const T &b) {
  return a > b ? a : b;
}
template <typename T>
inline const T min(const T &a, const T &b) {
  return a < b ? a : b;
}
template <typename T>
inline const T abs(const T &a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline void read(T &t) {
  register T res = 0, neg = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) {
    if (c == '-') {
      neg = -1;
    }
  }
  for (; isdigit(c); c = getchar()) {
    res = res * 10 + c - '0';
  }
  t = res * neg;
}
inline int in() {
  register int T;
  read(T);
  return T;
}
inline long long in_ll() {
  register long long T;
  read(T);
  return T;
}
}  // namespace t
const int N = 100050;
int s[N], T[N], nn[N << 1][2], siz[N], head[N], cnt, S[N], sums, sumt, n;
double ans;
void dfs(int x, int fa) {
  S[x] = s[x], siz[x] = 1;
  for (int i = head[x], y; i; i = nn[i][0])
    if ((y = nn[i][1]) != fa) dfs(y, x), S[x] += S[y], siz[x] += siz[y];
  return;
}
void calc(int x, int fa) {
  for (int i = head[x], y; i; i = nn[i][0])
    if ((y = nn[i][1]) != fa) {
      calc(y, x);
      ans += double(S[y]) / sums * siz[y] * T[x] / sumt;
    }
  ans += double(sums - S[x]) / sums * (n - siz[x]) * T[x] / sumt;
  return;
}
__attribute__((always_inline)) void add(int u, int v) {
  nn[++cnt][1] = v;
  nn[cnt][0] = head[u];
  head[u] = cnt;
}
int main() {
  n = t::in();
  int u, v;
  for (int i = 2; i <= n; ++i) {
    u = t::in();
    v = t::in();
    add(u, v);
    add(v, u);
  }
  for (int i = 1; i <= n; ++i) {
    s[i] = t::in();
    T[i] = t::in();
    sums += s[i];
    sumt += T[i];
  }
  dfs(1, 0), calc(1, 0);
  printf("%.20lf", ans);
  return 0;
}
