#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int INF = 1 << 30;
const long long LINF = 1LL << 60;
const double eps = 1e-9;
void prepare() {}
struct V {
  int key, p, l, r;
  int ml, mr;
  double sum;
  int dep;
  V() {
    dep = 0;
    l = -1;
    r = -1;
    ml = -1;
    mr = -1;
    sum = 0;
  }
};
V t[maxn];
int n, root;
set<pair<int, int> > se, sl;
int dfsl(int k) {
  if (t[k].l < 0) return t[k].key;
  if (t[k].ml >= 0) return t[k].ml;
  return t[k].ml = dfsl(t[k].l);
}
int dfsr(int k) {
  if (t[k].r < 0) return t[k].key;
  if (t[k].mr >= 0) return t[k].mr;
  return t[k].mr = dfsr(t[k].r);
}
void dfs(int k) {
  if (t[k].p < 0)
    t[k].dep = 0;
  else
    t[k].dep = t[t[k].p].dep + 1;
  if (t[k].l < 0) {
    t[k].ml = t[k].mr = t[k].key;
    return;
  }
  t[k].ml = dfsl(t[k].r);
  t[k].mr = dfsr(t[k].l);
  t[t[k].l].sum = t[k].sum + t[k].ml;
  t[t[k].r].sum = t[k].sum + t[k].mr;
  dfs(t[k].l);
  dfs(t[k].r);
}
double go(int x) { return t[x].sum / t[x].dep; }
double go1(int x) {
  int p = root, k = 0;
  double res = 0;
  while (t[p].l >= 0) {
    if (x < t[p].key) {
      res += t[p].ml;
      p = t[p].l;
    } else {
      res += t[p].mr;
      p = t[p].r;
    }
    k++;
  }
  return res / k;
}
bool solve() {
  int p;
  scanf("%d", &n);
  for (int i = (0); i < (((n))); i++) {
    scanf("%d%d", &p, &t[i].key);
    if (p > 0) {
      p--;
      if (t[p].l < 0)
        t[p].l = i;
      else
        t[p].r = i;
    } else
      root = i;
    t[i].p = p;
  }
  for (int i = (0); i < (((n))); i++) {
    if (t[i].l >= 0) {
      if (t[t[i].l].key > t[t[i].r].key) swap(t[i].l, t[i].r);
    } else
      sl.insert(make_pair(-t[i].key, i));
    se.insert(make_pair(t[i].key, i));
  }
  dfs(root);
  scanf("%d", &n);
  set<pair<int, int> >::iterator it;
  for (int i = (0); i < (((n))); i++) {
    scanf("%d", &p);
    it = se.lower_bound(make_pair(p, -1));
    if (it == se.end()) --it;
    p = it->first;
    it = sl.lower_bound(make_pair(-p, -1));
    if (it == sl.end()) it = sl.begin();
    p = it->second;
    printf("%.12lf\n", go(p));
  }
  return false;
}
int main() {
  prepare();
  while (solve())
    ;
  return 0;
}
