本题相对于其他的树形dp简单,不用去考虑那些花里胡哨的方式,直接累加就行,这里是AC代码:
using namespace std;
int T;
const int MAX=25000;
int Kuang[MAX],Wasi[MAX];
int father[MAX];
int main()
{
cin>>T;
for(int i=0;i<T;i++){
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>Kuang[i]>>Wasi[i];
}
for(int i=2;i<=n;i++){
cin>>father[i];
}
for(int i=2;i<=n;i++){
Kuang[i]+=Kuang[father[i]];
Wasi[i]+=Wasi[father[i]];
}
while(q--){
int x;
cin>>x;
cout<<Kuang[x]<<" "<<Wasi[x]<<endl;
}
}
return 0;
}