#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
long long n, q, key[maxn], par[maxn], l[maxn], r[maxn];
long long dpr[maxn], dpl[maxn], root, ans[maxn], t[maxn], a[maxn];
pair<long long, long long> p[maxn];
vector<long long> v[maxn];
double out[maxn];
void dfs1(long long ras) {
  if (!l[ras]) {
    dpl[ras] = dpr[ras] = key[ras];
    return;
  }
  dfs1(l[ras]);
  dfs1(r[ras]);
  dpr[ras] = dpr[r[ras]];
  dpl[ras] = dpl[l[ras]];
}
void dfs2(long long ras, long long s, long long e) {
  if (!l[ras]) {
    return;
  }
  long long first = upper_bound(a + s, a + e + 1, key[ras]) - a;
  ans[s] += dpl[r[ras]];
  ans[first] -= dpl[r[ras]];
  ans[first] += dpr[l[ras]];
  ans[e + 1] -= dpr[l[ras]];
  t[s]++;
  t[e + 1]--;
  if (s < first) {
    dfs2(l[ras], s, first - 1);
  }
  if (e >= first) {
    dfs2(r[ras], first, e);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(9);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> par[i] >> key[i];
    if (par[i] > 0) {
      v[par[i]].push_back(i);
    } else {
      root = i;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (v[i].size()) {
      if (key[v[i][0]] > key[v[i][1]]) {
        swap(v[i][0], v[i][1]);
      }
      l[i] = v[i][0];
      r[i] = v[i][1];
    }
  }
  dfs1(root);
  cin >> q;
  for (int i = 1; i <= q; i++) {
    cin >> p[i].first;
    p[i].second = i;
  }
  sort(p + 1, p + 1 + q);
  for (int i = 1; i <= q; i++) {
    a[i] = p[i].first;
  }
  dfs2(root, 1, q);
  for (int i = 1; i <= q; i++) {
    ans[i] += ans[i - 1];
    t[i] += t[i - 1];
  }
  for (int i = 1; i <= q; i++) {
    out[p[i].second] = double(ans[i]) / t[i];
  }
  for (int i = 1; i <= q; i++) {
    cout << out[i] << endl;
  }
  return 0;
}
