White-Black Balanced Subtrees - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <bits/stdc++.h>
using namespace std;
int t;
int n;
vector<int> gv[4005];
string s;
int tot;
int dp(int x){int val;if(s[x]=='B'){val=1;}else if(s[x]=='W'){val=-1;}if(gv[x].empty()){//叶子结点return val;}for(int i=0;i<gv[x].size();i++){val+=dp(gv[x][i]);}if(val==0){tot++;}return val;
}
void init(){memset(gv,0,sizeof(gv));s="\0";n=0;tot=0;
}
int main(){cin>>t;while(t--){cin>>n;int v;for(int i=2;i<=n;i++){cin>>v;gv[v].push_back(i);}cin>>s;s="#"+s;//下标从 1 开始dp(1);cout<<tot<<endl;init();}return 0;
}