本题相对于其他的树形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;
}