#include <bits/stdc++.h>
using namespace std;
#define FILE "SHIP"

#define int long long
#define ii pair<int, int>

#define fast ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define FOR(I, L, R) for(int I = (int)L; I <= (int)R; I++)
#define FOD(I, R, L) for(int I = (int)R; I >= (int)L; I--)
#define FOA(I, A) for(auto &I : A)

#define all(A) A.begin(), A.end()
#define fi first
#define se second

const int N = 2e5 + 10;
const int oo = 1e18;
const int mod = 1e9 + 7;

int n, q;
int a[N];
vector<int> g[N];

struct segment{
     int seg[N << 2], lazy[N << 2];

     segment(){
          memset(seg, 0, sizeof seg);
          memset(lazy, 0, sizeof lazy);
     }

     void push_down(int id, int l, int r){
          int m = (l + r) >> 1;
          seg[id << 1] = m - l + 1 - seg[id << 1];
          seg[id << 1 | 1] = r - m - seg[id << 1 | 1];

          lazy[id << 1] ^= lazy[id];
          lazy[id << 1 | 1] ^= lazy[id];
          lazy[id] = 0;
     }

     void update(int id, int l, int r, int u, int v){
          if(v < l || r < u) return;
          if(u <= l && r <= v){
               seg[id] = r - l + 1 - seg[id];
               lazy[id] ^= 1;

               return;
          }

          push_down(id, l, r);
          int mid = (l + r) >> 1;

          update(id << 1, l, mid, u, v);
          update(id << 1 | 1, mid + 1, r, u, v);

          seg[id] = seg[id << 1] + seg[id << 1 | 1];
     }

     int get(int id, int l, int r, int u, int v){
          if(v < l || r < u) return 0;
          if(u <= l || r <= v) return seg[id];

          push_down(id, l, r);
          int mid = (l + r) >> 1;

          int s1 = get(id << 1, l, mid, u, v);
          int s2 = get(id << 1 | 1, mid + 1, r, u, v);

          return s1 + s2;
     }
}sg;

int cnt;
int tour[N], in[N], out[N];

void euler(int u, int p){
     tour[++cnt] = u;
     in[u] = cnt;

     if(a[u]) sg.update(1, 1, n, cnt, cnt);

     FOA(v, g[u]) if(v != p){
          euler(v, u);
     }

     out[u] = cnt;
}

signed main(){ fast
     if(fopen(FILE ".INP", "r")){
          freopen(FILE".INP", "r", stdin);
          freopen(FILE".OUT", "w", stdout);
     }

     cin >> n;
     FOR(v, 2, n){
          int u; cin >> u;
          g[u].push_back(v);
          g[v].push_back(u);
     }
     FOR(i, 1, n) cin >> a[i];
     euler(1, 0);

     cin >> q;
     while(q--){
          int t, u;
          cin >> t >> u;
          t--;

          if(t){
               cout << sg.get(1, 1, n, in[u], out[u]) << '\n';
          }else{
               sg.update(1, 1, n, in[u], out[u]);
          }
     }
}
