#include <bits/stdc++.h> using namespace std; const int N = 100005; vector<int> tree[N]; int redCount[N]; // 每个节点的子树中红色节点的个数(含自己) char color[N]; // DFS 预处理,返回以 u 为根的子树红色节点个数 int dfs(int u) { redCount[u] = (color[u] == 'R') ? 1 : 0; for (int v : tree[u]) { redCount[u] += dfs(v); } return redCount[u]; } int main() { int n; cin >> n; // 构建树(节点编号从 1 到 n,根是 1) for (int i = 2, p; i <= n; ++i) { cin >> p; tree[p].push_back(i); } // 输入颜色(字符串下标从0开始) string s; cin >> s; for (int i = 1; i <= n; ++i) { color[i] = s[i - 1]; } // 预处理每个子树红色节点个数 dfs(1); // 回答查询 int q; cin >> q; while (q--) { int x; cin >> x; cout << redCount[x] << "\n"; } return 0; }