func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 2e5 + 228;   vector<int> g[MAXN];   vector<bool> vis(MAXN);   int n, m;   int p[MAXN];   int col[MAXN], help[MAXN];   int t[4 * MAXN], lazy[4 * MAXN];   int tin[MAXN], tout[MAXN];   int timer;   void dfs(int v) {     vis[v] = 1;     tin[v] = timer++;     for (int i = 0; i < g[v].size(); i++) {       int to = g[v][i];       if (vis[to] == 0) {         dfs(to);       }     }     tout[v] = timer - 1;   }   void build(int v, int tl, int tr) {     if (tl == tr) {       t[v] = help[tl];       lazy[v] = -1;     } else {       int tm = (tl + tr) >> 1;       build(2 * v, tl, tm);       build(2 * v + 1, tm + 1, tr);       t[v] = t[2 * v] + t[2 * v + 1];       lazy[v] = -1;     }   }   void push(int v, int tl, int tr) {     if (lazy[v] != -1) {       if (lazy[v] % 2 == 1) {         t[v] = (tr - tl + 1) - t[v];       }       if (tl != tr) {         if (lazy[2 * v] == -1) {           lazy[2 * v] = lazy[v];         } else {           lazy[2 * v] += lazy[v];         }         if (lazy[2 * v + 1] == -1) {           lazy[2 * v + 1] = lazy[v];         } else {           lazy[2 * v + 1] += lazy[v];         }       }       lazy[v] = -1;     }   }   void update(int v, int tl, int tr, int l, int r, long long color) {     push(v, tl, tr);     if (l > r) {       return;     }     if (tl == l && tr == r) {       if (lazy[v] == -1) {         lazy[v] = color;       } else {         lazy[v] += color;       }       push(v, tl, tr);       return;     }     int tm = (tl + tr) >> 1;     update(2 * v, tl, tm, l, min(tm, r), color);     update(2 * v + 1, tm + 1, tr, max(tm + 1, l), r, color);     t[v] = t[2 * v] + t[2 * v + 1];   }   long long get(int v, int tl, int tr, int l, int r) {     push(v, tl, tr);     if (l > r) {       return 0;     }     if (tl == l && tr == r) {       return t[v];     }     int tm = (tl + tr) >> 1;     return get(2 * v, tl, tm, l, min(tm, r)) +            get(2 * v + 1, tm + 1, tr, max(tm + 1, l), r);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0), cout.tie(0);     cin >> n;     for (int i = 1; i < n; i++) {       cin >> p[i];       p[i]--;       g[i].push_back(p[i]);       g[p[i]].push_back(i);     }     for (int i = 0; i < n; i++) {       cin >> col[i];     }     dfs(0);     for (int i = 0; i < n; i++) {       int start = tin[i];       help[start] = col[i];     }     build(1, 0, n - 1);     cin >> m;     for (int i = 0; i < m; i++) {       string a;       int x;       cin >> a >> x;       x--;       if (a ==  get ) {         cout << get(1, 0, n - 1, tin[x], tout[x]) << endl;       } else {         update(1, 0, n - 1, tin[x], tout[x], 1);       }     }     return 0;   }   