#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
const int maxn = 5e5;
const ll INF = 1e18;
struct segment_tree
{
ll seg[4 * maxn + 10], lazy[4 * maxn + 10];
segment_tree()
{
memset(seg, 0, sizeof seg);
memset(lazy, 0, sizeof lazy);
}
void push(int id)
{
if (lazy[id] == -1) return ;
seg[id << 1] = seg[id << 1 | 1] = lazy[id];
lazy[id << 1] = lazy[id << 1 | 1] = lazy[id];
lazy[id] = -1;
}
void update(int id, int l, int r, int u, int v, ll x)
{
if (r < u || l > v) return ;
if (u <= l && r <= v)
{
seg[id] = x;
lazy[id] = x;
return ;
}
int m = l + r >> 1;
push(id);
update(id << 1, l, m, u, v, x);
update(id << 1 | 1, m + 1, r, u, v, x);
seg[id] = max(seg[id << 1], seg[id << 1 | 1]);
}
ll get(int id, int l, int r, int u, int v)
{
if (r < u || l > v) return 0;
if (u <= l && r <= v) return seg[id];
int m = l + r >> 1;
push(id);
ll a = get(id << 1, l, m, u, v);
ll b = get(id << 1 | 1, m + 1, r, u, v);
return max(a, b);
}
};
int n, q, beg[maxn + 10], fin[maxn + 10], timer = 0;
ii query[maxn + 10];
vector<int> adj[maxn + 10];
segment_tree a, b;
void dfs(int top, int par = -1)
{
beg[top] = ++timer;
for (int next_top : adj[top])
if (next_top != par)
dfs(next_top, top);
fin[top] = timer;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("WATER_TREE.INP", "r"))
{
freopen("WATER_TREE.INP", "r", stdin);
freopen("WATER_TREE.OUT", "w", stdout);
}
cin >> n;
for (int i = 1; i < n; i++)
{
int x, y;
cin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(1);
cin >> q;
for (int i = 1; i <= q; i++)
cin >> query[i].fi >> query[i].se;
for (int i = 1; i <= q; i++)
{
int t = query[i].fi;
int v = query[i].se;
if (t == 1) a.update(1, 1, n, beg[v], fin[v], i);
if (t == 2) b.update(1, 1, n, beg[v], beg[v], i);
if (t == 3)
{
ll par = a.get(1, 1, n, beg[v], beg[v]);
ll child = b.get(1, 1, n, beg[v], fin[v]);
ll res = max(par, child);
cout << (query[res].fi == 1), el;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4biA9IDVlNTsKY29uc3QgbGwgSU5GID0gMWUxODsKCnN0cnVjdCBzZWdtZW50X3RyZWUKewogICAgbGwgc2VnWzQgKiBtYXhuICsgMTBdLCBsYXp5WzQgKiBtYXhuICsgMTBdOwogICAgc2VnbWVudF90cmVlKCkKICAgIHsKICAgICAgICBtZW1zZXQoc2VnLCAwLCBzaXplb2Ygc2VnKTsKICAgICAgICBtZW1zZXQobGF6eSwgMCwgc2l6ZW9mIGxhenkpOwogICAgfQogICAgdm9pZCBwdXNoKGludCBpZCkKICAgIHsKICAgICAgICBpZiAobGF6eVtpZF0gPT0gLTEpIHJldHVybiA7CiAgICAgICAgc2VnW2lkIDw8IDFdID0gc2VnW2lkIDw8IDEgfCAxXSA9IGxhenlbaWRdOwogICAgICAgIGxhenlbaWQgPDwgMV0gPSBsYXp5W2lkIDw8IDEgfCAxXSA9IGxhenlbaWRdOwogICAgICAgIGxhenlbaWRdID0gLTE7CiAgICB9CiAgICB2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBsbCB4KQogICAgewogICAgICAgIGlmIChyIDwgdSB8fCBsID4gdikgcmV0dXJuIDsKICAgICAgICBpZiAodSA8PSBsICYmIHIgPD0gdikKICAgICAgICB7CiAgICAgICAgICAgIHNlZ1tpZF0gPSB4OwogICAgICAgICAgICBsYXp5W2lkXSA9IHg7CiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICBwdXNoKGlkKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbSwgdSwgdiwgeCk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtICsgMSwgciwgdSwgdiwgeCk7CiAgICAgICAgc2VnW2lkXSA9IG1heChzZWdbaWQgPDwgMV0sIHNlZ1tpZCA8PCAxIHwgMV0pOwogICAgfQogICAgbGwgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpCiAgICB7CiAgICAgICAgaWYgKHIgPCB1IHx8IGwgPiB2KSByZXR1cm4gMDsKICAgICAgICBpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHNlZ1tpZF07CiAgICAgICAgaW50IG0gPSBsICsgciA+PiAxOwogICAgICAgIHB1c2goaWQpOwogICAgICAgIGxsIGEgPSBnZXQoaWQgPDwgMSwgbCwgbSwgdSwgdik7CiAgICAgICAgbGwgYiA9IGdldChpZCA8PCAxIHwgMSwgbSArIDEsIHIsIHUsIHYpOwogICAgICAgIHJldHVybiBtYXgoYSwgYik7CiAgICB9Cn07CgppbnQgbiwgcSwgYmVnW21heG4gKyAxMF0sIGZpblttYXhuICsgMTBdLCB0aW1lciA9IDA7CmlpIHF1ZXJ5W21heG4gKyAxMF07CnZlY3RvcjxpbnQ+IGFkalttYXhuICsgMTBdOwpzZWdtZW50X3RyZWUgYSwgYjsKCnZvaWQgZGZzKGludCB0b3AsIGludCBwYXIgPSAtMSkKewogICAgYmVnW3RvcF0gPSArK3RpbWVyOwogICAgZm9yIChpbnQgbmV4dF90b3AgOiBhZGpbdG9wXSkKICAgICAgICBpZiAobmV4dF90b3AgIT0gcGFyKQogICAgICAgICAgICBkZnMobmV4dF90b3AsIHRvcCk7CiAgICBmaW5bdG9wXSA9IHRpbWVyOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJXQVRFUl9UUkVFLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiV0FURVJfVFJFRS5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJXQVRFUl9UUkVFLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIGludCB4LCB5OwogICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICBhZGpbeV0ucHVzaF9iYWNrKHgpOwogICAgfQogICAgZGZzKDEpOwogICAgY2luID4+IHE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspCiAgICAgICAgY2luID4+IHF1ZXJ5W2ldLmZpID4+IHF1ZXJ5W2ldLnNlOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQogICAgewogICAgICAgIGludCB0ID0gcXVlcnlbaV0uZmk7CiAgICAgICAgaW50IHYgPSBxdWVyeVtpXS5zZTsKICAgICAgICBpZiAodCA9PSAxKSBhLnVwZGF0ZSgxLCAxLCBuLCBiZWdbdl0sIGZpblt2XSwgaSk7CiAgICAgICAgaWYgKHQgPT0gMikgYi51cGRhdGUoMSwgMSwgbiwgYmVnW3ZdLCBiZWdbdl0sIGkpOwogICAgICAgIGlmICh0ID09IDMpCiAgICAgICAgewogICAgICAgICAgICBsbCBwYXIgPSBhLmdldCgxLCAxLCBuLCBiZWdbdl0sIGJlZ1t2XSk7CiAgICAgICAgICAgIGxsIGNoaWxkID0gYi5nZXQoMSwgMSwgbiwgYmVnW3ZdLCBmaW5bdl0pOwogICAgICAgICAgICBsbCByZXMgPSBtYXgocGFyLCBjaGlsZCk7CiAgICAgICAgICAgIGNvdXQgPDwgKHF1ZXJ5W3Jlc10uZmkgPT0gMSksIGVsOwogICAgICAgIH0KICAgIH0KfQ==