#include <bits/stdc++.h>
const int SIZE = 200010;
using namespace std;
const int N = 2e5 + 10, M = 4e5 + 10;
struct Edge {
  int u, v, Next;
} G[M];
int tot;
int n, m, head[N];
void addd(int x, int y) {
  G[++tot].u = x;
  G[tot].v = y;
  G[tot].Next = head[x];
  head[x] = tot;
}
int a[200010], val[200010];
int vis[200010], Id[200010], In[200010];
int num = 0;
void dfs(int x) {
  a[x] = ++num;
  Id[num] = x;
  In[x] = x;
  for (int i = head[x]; i; i = G[i].Next) {
    int y = G[i].v;
    dfs(y);
    if (a[In[y]] > a[In[x]]) {
      In[x] = In[y];
    }
  }
}
struct stree {
  int l, r;
  long long sum, add;
} t[SIZE * 4];
void build(int p, int l, int r) {
  t[p].l = l;
  t[p].r = r;
  if (l == r) {
    t[p].sum = val[Id[l]];
    return;
  }
  int mid = (l + r) / 2;
  build(p * 2, l, mid);
  build(p * 2 + 1, mid + 1, r);
  t[p].sum = t[p * 2].sum + t[p * 2 + 1].sum;
}
void spread(int p) {
  if (t[p].add) {
    t[p * 2].sum = (t[p << 1].r - t[p << 1].l + 1) - t[p * 2].sum;
    t[p * 2 + 1].sum =
        (t[p << 1 | 1].r - t[p << 1 | 1].l + 1) - t[p * 2 + 1].sum;
    t[p * 2].add = 1 - t[p * 2].add;
    t[p * 2 + 1].add = 1 - t[p * 2 + 1].add;
    t[p].add = 0;
  }
}
void change(int L, int R, int p) {
  if (L <= t[p].l && t[p].r <= R) {
    t[p].sum = (t[p].r - t[p].l + 1) - t[p].sum;
    t[p].add = 1 - t[p].add;
    return;
  }
  spread(p);
  int mid = (t[p].l + t[p].r) >> 1;
  if (L <= mid) change(L, R, p << 1);
  if (mid < R) change(L, R, p << 1 | 1);
  t[p].sum = t[p * 2].sum + t[p * 2 + 1].sum;
}
long long ask(int p, int l, int r) {
  if (l <= t[p].l && r >= t[p].r) return t[p].sum;
  spread(p);
  int mid = (t[p].l + t[p].r) / 2;
  long long val = 0;
  if (l <= mid) val += ask(p * 2, l, r);
  if (r > mid) val += ask(p * 2 + 1, l, r);
  return val;
}
int main() {
  tot = 0;
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    int x;
    scanf("%d", &x);
    addd(x, i);
  }
  num = 0;
  dfs(1);
  int x;
  for (int i = 1; i <= n; i++) scanf("%d", &val[i]);
  build(1, 1, n);
  int q;
  cin >> q;
  char s[10];
  while (q--) {
    scanf("%s", s);
    if (s[0] == 'g') {
      scanf("%d", &x);
      cout << ask(1, a[x], a[In[x]]) << endl;
    } else {
      scanf("%d", &x);
      change(a[x], a[In[x]], 1);
    }
  }
  return 0;
}
