# include <stdio.h>
# include <string.h>
# include <limits.h>
int max(int a,int b){
return a>b?a:b;
}
int main() {
int mm= INT_MIN;
int m;
scanf("%d",&m);
int fnode[m],num[m], dp[m];
char str[m+1];
int i,j,n,cnt;
fnode[0]=1;
for(i=1;i<m;i++){
scanf("%d",fnode+i);
}
scanf("%s",str);
int q;
scanf("%d",&q);
int qr[q];
for(i=0;i<q;i++){
scanf("%d",qr+i);
}
for(i=0;i<m;i++){
if(str[i] == 'W') num[i]= 0;
if(str[i] == 'R' ) num[i]=1;
}
cnt=0;
for(i=0;i<m;i++){
cnt += num[i];
dp[i]=mm;
}
dp[0] = cnt;
for(i=m-1;i>0;i--){
j=i;
//if(dp[i]>0) continue;
dp[j] = max(dp[j],num[j]);
n=fnode[i];
if(n!=1){
// dp[n-1] -= dp[j];
dp[n-1] =max(dp[n-1]+dp[j], num[n-1]+dp[j]);
//dp[n-1] =dp[n-1]+dp[j];
//j=fnode[n-1];
//n=fnode[j];
continue;
}
}
// for(i=0;i<m;i++){
// printf("%d\x20",dp[i]);
// }
for(i=0;i<q;i++){
printf("%d\n",dp[qr[i]-1]);
}
//
return 0;
}
# include <string.h>
# include <limits.h>
int max(int a,int b){
return a>b?a:b;
}
int main() {
int mm= INT_MIN;
int m;
scanf("%d",&m);
int fnode[m],num[m], dp[m];
char str[m+1];
int i,j,n,cnt;
fnode[0]=1;
for(i=1;i<m;i++){
scanf("%d",fnode+i);
}
scanf("%s",str);
int q;
scanf("%d",&q);
int qr[q];
for(i=0;i<q;i++){
scanf("%d",qr+i);
}
for(i=0;i<m;i++){
if(str[i] == 'W') num[i]= 0;
if(str[i] == 'R' ) num[i]=1;
}
cnt=0;
for(i=0;i<m;i++){
cnt += num[i];
dp[i]=mm;
}
dp[0] = cnt;
for(i=m-1;i>0;i--){
j=i;
//if(dp[i]>0) continue;
dp[j] = max(dp[j],num[j]);
n=fnode[i];
if(n!=1){
// dp[n-1] -= dp[j];
dp[n-1] =max(dp[n-1]+dp[j], num[n-1]+dp[j]);
//dp[n-1] =dp[n-1]+dp[j];
//j=fnode[n-1];
//n=fnode[j];
continue;
}
}
// for(i=0;i<m;i++){
// printf("%d\x20",dp[i]);
// }
for(i=0;i<q;i++){
printf("%d\n",dp[qr[i]-1]);
}
//
return 0;
}