1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N ((1<<19)-1)
4
5 int n,cnt;
6 int fir[N],size[N],pt[N],pos[N],fa[N<<2],data[N<<2],ori[N];
7
8 struct edge{
9 int to,n;
10 edge(){} edge(int _to,int _n){to=_to,n=_n;}
11 };
12 vector<edge>e;
13
14 struct SN{
15 int num,flag;
16 SN*son[2];
17 }sn[N<<2],*root;
18
19 void putin()
20 {
21 int i,j,x;
22 scanf("%d",&n);
23 e.push_back(edge());
24 for (i=1;i<=n;i++)
25 for (j=0;j<3;j++)
26 {
27 scanf("%d",&x);
28 fa[x]=i;
29 if (x<=n)
30 {
31 e.push_back(edge(x,fir[i]));
32 fir[i]=e.size()-1;
33 }
34 }
35 }
36
37 void pre(int x)
38 {
39 size[x]=1;pt[x]=0;
40 for (int i=fir[x];i;i=e[i].n)
41 {
42 pre(e[i].to);
43 size[x]+=size[e[i].to];
44 if (size[e[i].to]>size[pt[x]]) pt[x]=e[i].to;
45 }
46 }
47
48 void getpath(int x)
49 {
50 pos[x]=++cnt;
51 if (pt[x])
52 {
53 ori[pt[x]]=ori[x];
54 getpath(pt[x]);
55 }
56 for (int i=fir[x];i;i=e[i].n)
57 {
58 if (e[i].to==pt[x]) continue;
59 ori[e[i].to]=e[i].to;
60 getpath(e[i].to);
61 }
62 }
63
64 void build(SN&x,int l,int r)
65 {
66 x.flag=-1;
67 if (l==r) return;
68 x.son[0]=&sn[++cnt];
69 x.son[1]=&sn[++cnt];
70 int m=(l+r)>>1;
71 build(*x.son[0],l,m);
72 build(*x.son[1],m+1,r);
73 }
74
75 void update(SN&x)
76 {
77 for (int i=0;i<2;i++)
78 {
79 SN&z=*x.son[i];
80 z.num=z.flag=x.flag;
81 }
82 x.flag=-1;
83 }
84
85 bool change(SN&x,int l,int r,int i,int j,int &p,int &v)
86 {
87 if (i<=l&&r<=j&&x.num==p)
88 {
89 x.num+=v;
90 x.flag=x.num;
91 return 0;
92 }
93 if (l==r)
94 {
95 x.num+=v;
96 return 1;
97 }
98 if (x.flag!=-1) update(x);
99 int m=(l+r)>>1;
100 bool re=0;
101 if (m<j) re=change(*x.son[1],m+1,r,i,j,p,v);
102 if (!re&&i<=m) re=change(*x.son[0],l,m,i,j,p,v);
103 x.num=-1;
104 if ((*x.son[0]).num==(*x.son[1]).num)x.num=(*x.son[0]).num;
105 return re;
106 }
107
108 void work(int x)
109 {
110 int p,v;
111 if (data[x])
112 {
113 data[x]=0;
114 p=2,v=-1;
115 }
116 else
117 {
118 data[x]=1;
119 p=1,v=1;
120 }
121 x=fa[x];
122 while (x)
123 {
124 if (change(*root,1,n,pos[ori[x]],pos[x],p,v)) return;
125 x=fa[ori[x]];
126 }
127 }
128
129 void initialize()
130 {
131 int x;
132 for (int i=n+1;i<=3*n+1;i++)
133 {
134 scanf("%d",&x);
135 if (x) work(i);
136 }
137 }
138
139 int SR(SN&x,int r)
140 {
141 if (r==1) return x.num;
142 if (x.flag!=-1) update(x);
143 return SR(*x.son[0],(1+r)>>1);
144 }
145
146 void respond()
147 {
148 int q,x,temp;
149 scanf("%d",&q);
150 for (int i=0;i<q;i++)
151 {
152 scanf("%d",&x);
153 work(x);
154 temp=SR(*root,n);
155 if (temp>1) printf("%d\n",1);
156 else printf("%d\n",0);
157 }
158 }
159
160 int main()
161 {
162 putin();
163 pre(1);
164 ori[1]=1;
165 getpath(1);
166 cnt=0;
167 root=&sn[0];
168 build(*root,1,n);
169 initialize();
170 respond();
171 }