#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<int> vi;
typedef long double ld;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<int>::iterator sit;
typedef map<int,int>::iterator mit;
typedef vector<int>::iterator vit;
const int N = 100001;
const int B = 400;
const int SHIFT = N;
ll cnt[N*2/B + 3][2*N];
int add[N*2/B + 3];
int a[N*2/B + 3][B+1];
int s[N];
int e[N];
vi adj[N+1];
ll c[N+1];
ll v[2*N+1];
bool mode[N+1];
int timer;
void dfs(int u, int p)
{
s[u] = timer++;
v[s[u]] = c[u];
for(int i = 0; i < adj[u].size(); i++)
{
int v = adj[u][i];
if(p==v) continue;
dfs(v, u);
}
e[u] = timer++;
v[e[u]] = c[u];
}
ii getindex(int x)
{
return mp(x/B, x%B);
}
void init(int n)
{
for(int i = 0; i < n; i++)
{
ii l = getindex(s[i]); ii r = getindex(e[i]);
cnt[l.fi][SHIFT] += c[i];
cnt[r.fi][SHIFT] += c[i];
}
}
void upd(int l, int r, int ad)
{
//cerr<<l<<' '<<r<<' '<<ad<<'\n';
int bl = l/B;
int curpos = l%B;
int cur = l;
for(;(curpos < B && cur<=r); cur++,curpos++)
{
int val = a[bl][curpos];
cnt[bl][val+SHIFT]-=v[cur];
cnt[bl][val+ad+SHIFT]+=v[cur];
a[bl][curpos]+=ad;
}
curpos = 0;
bl++;
while(cur+B-1<=r)
{
add[bl] += ad;
bl++;
cur+=B;
}
for(;(curpos < B && cur<=r); cur++,curpos++)
{
int val = a[bl][curpos];
cnt[bl][val+SHIFT]-=v[cur];
cnt[bl][val+ad+SHIFT]+=v[cur];
a[bl][curpos]+=ad;
}
}
ll query(int l, int r, int vv)
{
//cerr<<l<<' '<<r<<' '<<vv<<'\n';
ll ans = 0;
int bl = l/B;
int curpos = l%B;
int cur = l;
for(;(curpos < B && cur<=r); cur++,curpos++)
{
int val = a[bl][curpos];
if(val+add[bl]==vv) ans+=v[cur];
}
curpos = 0;
bl++;
while(cur+B-1<=r)
{
ans+=cnt[bl][SHIFT-add[bl]+vv];
bl++;
cur+=B;
}
for(;(curpos < B && cur<=r); cur++,curpos++)
{
int val = a[bl][curpos];
if(val+add[bl]==vv) ans+=v[cur];
}
return ans;
}
void flip(int u)
{
if(mode[u])
{
upd(s[u], e[u], -1);
}
else
{
upd(s[u], e[u], 1);
}
mode[u]^=1;
}
ll query(int u)
{
if(!mode[u]) return 0;
else return query(s[u], e[u], a[s[u]/B][s[u]%B]+add[s[u]/B])/2;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int n; cin >> n;
timer=0;
for(int i = 0; i < n; i++)
{
cin>>c[i];
mode[i]=1;
}
for(int i = 0; i < n - 1; i++)
{
int u, v; cin>>u>>v;
u--; v--;
adj[u].pb(v); adj[v].pb(u);
}
dfs(0, -1);
init(n);
int q; cin >> q;
while(q--)
{
int t, u; cin>>t>>u;
t--; u--;
if(t==0)
{
flip(u);
}
else
{
cout<<query(u)<<'\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmYm8gZmluZF9ieV9vcmRlcgojZGVmaW5lIG9vayBvcmRlcl9vZl9rZXkKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8bGwsbGw+IGlpOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOyAKdHlwZWRlZiB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IHBiZHM7CnR5cGVkZWYgc2V0PGludD46Oml0ZXJhdG9yIHNpdDsKdHlwZWRlZiBtYXA8aW50LGludD46Oml0ZXJhdG9yIG1pdDsKdHlwZWRlZiB2ZWN0b3I8aW50Pjo6aXRlcmF0b3Igdml0OwoKY29uc3QgaW50IE4gPSAxMDAwMDE7CmNvbnN0IGludCBCID0gNDAwOwpjb25zdCBpbnQgU0hJRlQgPSBOOwoKbGwgY250W04qMi9CICsgM11bMipOXTsKaW50IGFkZFtOKjIvQiArIDNdOwppbnQgYVtOKjIvQiArIDNdW0IrMV07CmludCBzW05dOwppbnQgZVtOXTsKdmkgYWRqW04rMV07CmxsIGNbTisxXTsKbGwgdlsyKk4rMV07CmJvb2wgbW9kZVtOKzFdOwppbnQgdGltZXI7Cgp2b2lkIGRmcyhpbnQgdSwgaW50IHApCnsKCXNbdV0gPSB0aW1lcisrOwoJdltzW3VdXSA9IGNbdV07Cglmb3IoaW50IGkgPSAwOyBpIDwgYWRqW3VdLnNpemUoKTsgaSsrKQoJewoJCWludCB2ID0gYWRqW3VdW2ldOwoJCWlmKHA9PXYpIGNvbnRpbnVlOwoJCWRmcyh2LCB1KTsKCX0KCWVbdV0gPSB0aW1lcisrOwoJdltlW3VdXSA9IGNbdV07Cn0KCmlpIGdldGluZGV4KGludCB4KQp7CglyZXR1cm4gbXAoeC9CLCB4JUIpOwp9Cgp2b2lkIGluaXQoaW50IG4pCnsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJaWkgbCA9IGdldGluZGV4KHNbaV0pOyBpaSByID0gZ2V0aW5kZXgoZVtpXSk7CgkJY250W2wuZmldW1NISUZUXSArPSBjW2ldOwoJCWNudFtyLmZpXVtTSElGVF0gKz0gY1tpXTsKCX0KfQoKdm9pZCB1cGQoaW50IGwsIGludCByLCBpbnQgYWQpCnsKCS8vY2Vycjw8bDw8JyAnPDxyPDwnICc8PGFkPDwnXG4nOwoJaW50IGJsID0gbC9COwoJaW50IGN1cnBvcyA9IGwlQjsKCWludCBjdXIgPSBsOwoJZm9yKDsoY3VycG9zIDwgQiAmJiBjdXI8PXIpOyBjdXIrKyxjdXJwb3MrKykKCXsKCQlpbnQgdmFsID0gYVtibF1bY3VycG9zXTsKCQljbnRbYmxdW3ZhbCtTSElGVF0tPXZbY3VyXTsKCQljbnRbYmxdW3ZhbCthZCtTSElGVF0rPXZbY3VyXTsKCQlhW2JsXVtjdXJwb3NdKz1hZDsKCX0KCWN1cnBvcyA9IDA7CglibCsrOwoJd2hpbGUoY3VyK0ItMTw9cikKCXsKCQlhZGRbYmxdICs9IGFkOwkJCgkJYmwrKzsKCQljdXIrPUI7Cgl9Cglmb3IoOyhjdXJwb3MgPCBCICYmIGN1cjw9cik7IGN1cisrLGN1cnBvcysrKQoJewoJCWludCB2YWwgPSBhW2JsXVtjdXJwb3NdOwoJCWNudFtibF1bdmFsK1NISUZUXS09dltjdXJdOwoJCWNudFtibF1bdmFsK2FkK1NISUZUXSs9dltjdXJdOwoJCWFbYmxdW2N1cnBvc10rPWFkOwoJfQp9CgpsbCBxdWVyeShpbnQgbCwgaW50IHIsIGludCB2dikKewoJLy9jZXJyPDxsPDwnICc8PHI8PCcgJzw8dnY8PCdcbic7CglsbCBhbnMgPSAwOwoJaW50IGJsID0gbC9COwoJaW50IGN1cnBvcyA9IGwlQjsKCWludCBjdXIgPSBsOwoJZm9yKDsoY3VycG9zIDwgQiAmJiBjdXI8PXIpOyBjdXIrKyxjdXJwb3MrKykKCXsKCQlpbnQgdmFsID0gYVtibF1bY3VycG9zXTsKCQlpZih2YWwrYWRkW2JsXT09dnYpIGFucys9dltjdXJdOwoJfQoJY3VycG9zID0gMDsKCWJsKys7Cgl3aGlsZShjdXIrQi0xPD1yKQoJewoJCWFucys9Y250W2JsXVtTSElGVC1hZGRbYmxdK3Z2XTsJCgkJYmwrKzsKCQljdXIrPUI7Cgl9Cglmb3IoOyhjdXJwb3MgPCBCICYmIGN1cjw9cik7IGN1cisrLGN1cnBvcysrKQoJewoJCWludCB2YWwgPSBhW2JsXVtjdXJwb3NdOwoJCWlmKHZhbCthZGRbYmxdPT12dikgYW5zKz12W2N1cl07Cgl9CglyZXR1cm4gYW5zOwp9Cgp2b2lkIGZsaXAoaW50IHUpCnsKCWlmKG1vZGVbdV0pCgl7CgkJdXBkKHNbdV0sIGVbdV0sIC0xKTsKCX0KCWVsc2UKCXsKCQl1cGQoc1t1XSwgZVt1XSwgMSk7Cgl9Cgltb2RlW3VdXj0xOwp9CgpsbCBxdWVyeShpbnQgdSkKewoJaWYoIW1vZGVbdV0pIHJldHVybiAwOwoJZWxzZSByZXR1cm4gcXVlcnkoc1t1XSwgZVt1XSwgYVtzW3VdL0JdW3NbdV0lQl0rYWRkW3NbdV0vQl0pLzI7Cn0KCmludCBtYWluKCkKewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKCWludCBuOyBjaW4gPj4gbjsKCXRpbWVyPTA7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCWNpbj4+Y1tpXTsKCQltb2RlW2ldPTE7Cgl9Cglmb3IoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykKCXsKCQlpbnQgdSwgdjsgY2luPj51Pj52OwoJCXUtLTsgdi0tOwoJCWFkalt1XS5wYih2KTsgYWRqW3ZdLnBiKHUpOwoJfQoJZGZzKDAsIC0xKTsKCWluaXQobik7CglpbnQgcTsgY2luID4+IHE7Cgl3aGlsZShxLS0pCgl7CgkJaW50IHQsIHU7IGNpbj4+dD4+dTsKCQl0LS07IHUtLTsKCQlpZih0PT0wKQoJCXsKCQkJZmxpcCh1KTsKCQl9CgkJZWxzZQoJCXsKCQkJY291dDw8cXVlcnkodSk8PCdcbic7CgkJfQoJfQp9Cg==