#include <bits/stdc++.h>
using namespace std;
vector<int> childs[100005];
int dep = 0;
int ans[100005], val[100005], anak[100005], potong[100005];
void traverse(int now) {
for(int i = 0; i < childs[now].size(); i++) {
traverse(childs[now][i]);
potong[now]+=potong[childs[now][i]];
anak[now]+=anak[childs[now][i]];
}
anak[now]++;
potong[now]+=val[now];
ans[anak[now]] = max(ans[anak[now]], potong[now]);
}
int main() {
int n;
scanf("%d", &n);
memset(ans,0,sizeof ans);
memset(anak,0,sizeof anak);
memset(val,0,sizeof val);
memset(potong,0,sizeof potong);
for(int i = 1; i<n; i++) {
int x,y;
scanf("%d %d", &x, &y);
childs[x].push_back(i);
val[i] = y;
}
traverse(0);
int q;
scanf("%d", &q);
for(int i = 1; i<=q ; i++) {
int k;
scanf("%d", &k);
if(ans[k]) printf("%d\n", ans[k]);
else printf("-1\n");
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2ZWN0b3I8aW50PiBjaGlsZHNbMTAwMDA1XTsKaW50IGRlcCA9IDA7CmludCBhbnNbMTAwMDA1XSwgdmFsWzEwMDAwNV0sIGFuYWtbMTAwMDA1XSwgcG90b25nWzEwMDAwNV07CnZvaWQgdHJhdmVyc2UoaW50IG5vdykgewoJZm9yKGludCBpID0gMDsgaSA8IGNoaWxkc1tub3ddLnNpemUoKTsgaSsrKSB7CgkJdHJhdmVyc2UoY2hpbGRzW25vd11baV0pOwoJCXBvdG9uZ1tub3ddKz1wb3RvbmdbY2hpbGRzW25vd11baV1dOwoJCWFuYWtbbm93XSs9YW5ha1tjaGlsZHNbbm93XVtpXV07Cgl9CglhbmFrW25vd10rKzsKCXBvdG9uZ1tub3ddKz12YWxbbm93XTsKCWFuc1thbmFrW25vd11dID0gbWF4KGFuc1thbmFrW25vd11dLCBwb3Rvbmdbbm93XSk7Cn0KCmludCBtYWluKCkgewoJaW50IG47CglzY2FuZigiJWQiLCAmbik7CgltZW1zZXQoYW5zLDAsc2l6ZW9mIGFucyk7CgltZW1zZXQoYW5haywwLHNpemVvZiBhbmFrKTsKCW1lbXNldCh2YWwsMCxzaXplb2YgdmFsKTsKCW1lbXNldChwb3RvbmcsMCxzaXplb2YgcG90b25nKTsKCWZvcihpbnQgaSA9IDE7IGk8bjsgaSsrKSB7CgkJaW50IHgseTsKCQlzY2FuZigiJWQgJWQiLCAmeCwgJnkpOwoJCWNoaWxkc1t4XS5wdXNoX2JhY2soaSk7CgkJdmFsW2ldID0geTsKCX0KCXRyYXZlcnNlKDApOwoJaW50IHE7CglzY2FuZigiJWQiLCAmcSk7Cglmb3IoaW50IGkgPSAxOyBpPD1xIDsgaSsrKSB7CgkJaW50IGs7CgkJc2NhbmYoIiVkIiwgJmspOwoJCWlmKGFuc1trXSkgcHJpbnRmKCIlZFxuIiwgYW5zW2tdKTsKCQllbHNlIHByaW50ZigiLTFcbiIpOwoJfQoKCXJldHVybiAwOwp9