#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long s = 0, w = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 3) + (s << 1) + (ch ^ '0'), ch = getchar();
  return s * w;
}
void write(long long s) {
  if (s < 0) s = -s, putchar('-');
  if (s > 9) write(s / 10);
  putchar(s % 10 + '0');
}
void writeln(long long s) {
  write(s);
  puts("");
}
void writeln() { puts(""); }
int n;
struct Edge {
  int to, next;
} e[1926817];
int head[1926817], t = 0;
void addedge(int x, int y) {
  e[++t] = (Edge){y, head[x]};
  head[x] = t;
  e[++t] = (Edge){x, head[y]};
  head[y] = t;
}
int A[1926817], B[1926817], sumA = 0, sumB = 0;
double a[1926817], b[1926817];
int sz[1926817], psz[1926817];
double v[1926817], pv[1926817];
double sum[1926817], psum[1926817];
void dfs1(int now, int fa) {
  sz[now] = 1;
  v[now] = a[now];
  sum[now] = 0;
  for (int i = head[now]; i; i = e[i].next) {
    if (e[i].to == fa) continue;
    dfs1(e[i].to, now);
    sz[now] += sz[e[i].to];
    v[now] += v[e[i].to];
    sum[now] += sz[e[i].to] * v[e[i].to];
  }
}
void dfs2(int now, int fa) {
  for (int i = head[now]; i; i = e[i].next) {
    if (e[i].to == fa) continue;
    psz[now] -= psz[e[i].to];
    psz[e[i].to] = n;
    pv[now] -= pv[e[i].to];
    pv[e[i].to] = 1;
    for (int j = head[e[i].to]; j; j = e[j].next)
      psum[e[i].to] += psz[e[j].to] * pv[e[j].to];
    dfs2(e[i].to, now);
    pv[e[i].to] -= pv[now];
    pv[now] = 1;
    psz[e[i].to] -= psz[now];
    psz[now] = n;
  }
}
double ans = 0;
signed main() {
  int qwqqw;
  n = read();
  for (int i = 1; i < n; i++) {
    int x = read();
    int y = read();
    addedge(x, y);
  }
  for (int i = 1; i <= n; i++)
    A[i] = read(), B[i] = read(), sumA += A[i], sumB += B[i];
  for (int i = 1; i <= n; i++)
    a[i] = 1.0 * A[i] / sumA, b[i] = 1.0 * B[i] / sumB;
  dfs1(1, 0);
  psum[1] = sum[1];
  for (int i = 1; i <= n; i++) psz[i] = sz[i], pv[i] = v[i];
  dfs2(1, 0);
  for (int i = 1; i <= n; i++) ans += b[i] * psum[i];
  printf("%.12lf\n", ans);
  return 0;
}
