//not finish #include #include using namespace std; const int N=2e5+5,inf=0x3f3f3f3f; int w[N],to[N],ne[N],h[N]; int cnt=0; int n; struct Node { int fa; int sum; int max; int min; int len; int faw; // vector son; } a[N]; void add(int u,int v,int w1) { a[v].fa=u; a[v].faw=w1; w[++cnt]=w1; to[cnt]=v; ne[cnt]=h[u]; h[u]=cnt; } void dfs(int u) { int v,vmax; a[u].max=0; a[u].min=inf; a[u].len=0; for(int i=h[u]; i; i=ne[i]) { v=to[i]; dfs(v); a[u].sum+=a[v].sum+w[i]*(a[v].len+1); vmax=a[v].max+w[i]; a[u].max=a[u].max>vmax? a[u].max:vmax; a[u].min=a[u].min=k) { ans=a[1].sum; ans-=a[u].sum; len=a[u].len+1; ans-=a[u].faw*a[u].len; } u=a[u].fa; }while(a[u].fa) } int main() { int u,v,w1; scanf("%d",&n); for(int i=2; i<=n; i++) { scanf("%d%d",&u,&w1); add(u,i,w1); } dfs(1); ce(); int q; scanf("%d",&q); while(q--) { scanf("%d%d",&x,&k); pirntf("%d",goup(x,k)); } }