遍历每个颜色red[i]:
如果red[i]=1 (R):将自身以及它的父节点,以及父节点的父节点... 让他们的cnt[父->父]++
每次询问直接输出cnt[q]即可
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e5+10;
int par[N];
int red[N];
int cnt[N];
int n;
int main() {
cin >> n;
int p;
memset(par, -1, sizeof(par));
for(int i = 2; i <= n; i++){
cin >> p;
par[i] = p;
}
string c;
cin >> c;
for(int i = 0; i < n; i++){
if(c[i]=='R'){
red[i+1]=1;
}
}
for(int i = 1; i <= n; i++){
if(red[i]==1){
cnt[i]++;
int tmp = par[i];
while(tmp!=-1){
cnt[tmp]++;
tmp = par[tmp];
}
}
}
int q,t;
cin >> q;
while(q--){
cin >> t;
cout << cnt[t] << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")