#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(), x.end()
const int N = 1e5 + 5;
const int INF = 1e18;
struct SegTree {
struct Node{
int val, zero, mn;
};
int n;
vector<Node> tree;
vector<int> lazy;
#define LEFT node * 2 + 1
#define RIGHT node * 2 + 2
SegTree(vector<int> &arr) {
this->n = arr.size();
tree.resize(4 * n);
lazy.assign(4 * n, 0); // 1
build(0, 0, n - 1, arr);
}
Node merge(Node a, Node b) {
Node r;
r.val = a.val + b.val;
r.zero = a.zero + b.zero;
r.mn = min(a.mn, b.mn);
return r;
}
void build(int node, int start, int end, vector<int>& arr) {
if (start == end) {
tree[node] = {arr[start], arr[start] == 0, arr[start]};
return;
}
int mid = (start + end) / 2;
build(LEFT, start, mid, arr);
build(RIGHT, mid + 1, end, arr);
tree[node] = merge(tree[LEFT], tree[RIGHT]);
}
void apply(int node, int start, int end, int val) {
tree[node].mn -= val;
tree[node].val -= (start - end + 1) * val; // 3
lazy[node] += val;
}
void push(int node, int start, int end) {
if (!lazy[node]) return;
if (start == end) {
lazy[node] = 0;
return;
}
int mid = (start + end) / 2;
apply(LEFT, start, mid, lazy[node]);
apply(RIGHT, mid + 1, end, lazy[node]);
lazy[node] = 0;
}
void update(int node, int start, int end, int L, int R, int val) {
if (R < start || end < L || !tree[node].val) return; // 4
if (L <= start && end <= R && tree[node].mn > val){ // 2
apply(node, start, end, val);
return;
}
if(start == end){
tree[node].val = max(0ll, tree[node].val - val);
tree[node].zero = tree[node].val == 0;
tree[node].mn = tree[node].val;
return;
}
push(node, start, end);
int mid = (start + end) / 2;
update(LEFT, start, mid, L, R, val);
update(RIGHT, mid + 1, end, L, R, val);
tree[node] = merge(tree[LEFT], tree[RIGHT]);
}
Node query(int node, int start, int end, int L, int R) {
if (R < start || end < L) return {0, 0, INF};
if (L <= start && end <= R) return tree[node];
push(node, start, end);
int mid = (start + end) / 2;
return merge(query(LEFT, start, mid, L, R), query(RIGHT, mid + 1, end, L, R));
}
// 0-indexed
void update(int L, int R, int val){
if(L > R) return;
update(0, 0, n - 1, L, R, val);
}
Node query(int L, int R) {
if(L > R) return {0, 0, INF};
return query(0, 0, n - 1, L, R);
}
};
vector<int> flat;
int a[N], in[N], out[N];
vector<int> g[N];
int timer = 0;
void dfs(int node, int par){
in[node] = timer++;
flat.push_back(a[node]);
for(auto next : g[node]){
if(next == par) continue;
dfs(next, node);
}
out[node] = timer - 1;
}
void solve() {
int n;
cin >> n;
for(int i = 1; i <= n; i++){
int h, p;
cin >> h >> p;
a[i] = h;
g[i].push_back(p);
g[p].push_back(i);
}
// for(int i = 0; i <= n; i++) cout << a[i] << ' ';
// cout << '\n';
dfs(0, -1);
int q;
cin >> q;
SegTree st(flat);
while(q--){
int t, v, x;
cin >> t >> v;
if(t == 1){
cin >> x;
st.update(in[v] + 1, out[v], x);
}else{
cout << (out[v] - in[v]) - st.query(in[v] + 1, out[v]).zero << '\n';
}
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int tc = 1;
// cin >> tc;
for (int i = 0; i < tc; i += 1) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCmNvbnN0IGludCBOID0gMWU1ICsgNTsKY29uc3QgaW50IElORiA9IDFlMTg7CgpzdHJ1Y3QgU2VnVHJlZSB7CiAgICBzdHJ1Y3QgTm9kZXsKICAgICAgICBpbnQgdmFsLCB6ZXJvLCBtbjsKICAgIH07CiAgICBpbnQgbjsKICAgIHZlY3RvcjxOb2RlPiB0cmVlOwogICAgdmVjdG9yPGludD4gbGF6eTsKICAgICNkZWZpbmUgTEVGVCBub2RlICogMiArIDEKICAgICNkZWZpbmUgUklHSFQgbm9kZSAqIDIgKyAyCgogICAgU2VnVHJlZSh2ZWN0b3I8aW50PiAmYXJyKSB7CiAgICAgICAgdGhpcy0+biA9IGFyci5zaXplKCk7CiAgICAgICAgdHJlZS5yZXNpemUoNCAqIG4pOwogICAgICAgIGxhenkuYXNzaWduKDQgKiBuLCAwKTsgLy8gMQogICAgICAgIGJ1aWxkKDAsIDAsIG4gLSAxLCBhcnIpOwogICAgfQoKICAgIE5vZGUgbWVyZ2UoTm9kZSBhLCBOb2RlIGIpIHsKICAgICAgICBOb2RlIHI7CiAgICAgICAgci52YWwgPSBhLnZhbCArIGIudmFsOwogICAgICAgIHIuemVybyA9IGEuemVybyArIGIuemVybzsKICAgICAgICByLm1uID0gbWluKGEubW4sIGIubW4pOwogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIHZvaWQgYnVpbGQoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgdmVjdG9yPGludD4mIGFycikgewogICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgICAgICAgdHJlZVtub2RlXSA9IHthcnJbc3RhcnRdLCBhcnJbc3RhcnRdID09IDAsIGFycltzdGFydF19OwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSAoc3RhcnQgKyBlbmQpIC8gMjsKICAgICAgICBidWlsZChMRUZULCBzdGFydCwgbWlkLCBhcnIpOwogICAgICAgIGJ1aWxkKFJJR0hULCBtaWQgKyAxLCBlbmQsIGFycik7CiAgICAgICAgdHJlZVtub2RlXSA9IG1lcmdlKHRyZWVbTEVGVF0sIHRyZWVbUklHSFRdKTsKICAgIH0KCiAgICB2b2lkIGFwcGx5KGludCBub2RlLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCB2YWwpIHsKICAgICAgICB0cmVlW25vZGVdLm1uIC09IHZhbDsKICAgICAgICB0cmVlW25vZGVdLnZhbCAtPSAoc3RhcnQgLSBlbmQgKyAxKSAqIHZhbDsgLy8gMwogICAgICAgIGxhenlbbm9kZV0gKz0gdmFsOwogICAgfQoKICAgIHZvaWQgcHVzaChpbnQgbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAgICAgaWYgKCFsYXp5W25vZGVdKSByZXR1cm47CiAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICAgICAgICBsYXp5W25vZGVdID0gMDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICAgICAgYXBwbHkoTEVGVCwgc3RhcnQsIG1pZCwgbGF6eVtub2RlXSk7CiAgICAgICAgYXBwbHkoUklHSFQsIG1pZCArIDEsIGVuZCwgbGF6eVtub2RlXSk7CiAgICAgICAgbGF6eVtub2RlXSA9IDA7CiAgICB9CgogICAgdm9pZCB1cGRhdGUoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgaW50IEwsIGludCBSLCBpbnQgdmFsKSB7CiAgICAgICAgaWYgKFIgPCBzdGFydCB8fCBlbmQgPCBMIHx8ICF0cmVlW25vZGVdLnZhbCkgcmV0dXJuOyAvLyA0CiAgICAgICAgaWYgKEwgPD0gc3RhcnQgJiYgZW5kIDw9IFIgJiYgdHJlZVtub2RlXS5tbiA+IHZhbCl7IC8vIDIKICAgICAgICAgICAgYXBwbHkobm9kZSwgc3RhcnQsIGVuZCwgdmFsKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZihzdGFydCA9PSBlbmQpewogICAgICAgICAgICB0cmVlW25vZGVdLnZhbCA9IG1heCgwbGwsIHRyZWVbbm9kZV0udmFsIC0gdmFsKTsKICAgICAgICAgICAgdHJlZVtub2RlXS56ZXJvID0gdHJlZVtub2RlXS52YWwgPT0gMDsKICAgICAgICAgICAgdHJlZVtub2RlXS5tbiA9IHRyZWVbbm9kZV0udmFsOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHB1c2gobm9kZSwgc3RhcnQsIGVuZCk7CiAgICAgICAgaW50IG1pZCA9IChzdGFydCArIGVuZCkgLyAyOwogICAgICAgIHVwZGF0ZShMRUZULCBzdGFydCwgbWlkLCBMLCBSLCB2YWwpOwogICAgICAgIHVwZGF0ZShSSUdIVCwgbWlkICsgMSwgZW5kLCBMLCBSLCB2YWwpOwogICAgICAgIHRyZWVbbm9kZV0gPSBtZXJnZSh0cmVlW0xFRlRdLCB0cmVlW1JJR0hUXSk7CiAgICB9CgogICAgTm9kZSBxdWVyeShpbnQgbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgTCwgaW50IFIpIHsKICAgICAgICBpZiAoUiA8IHN0YXJ0IHx8IGVuZCA8IEwpIHJldHVybiB7MCwgMCwgSU5GfTsKICAgICAgICBpZiAoTCA8PSBzdGFydCAmJiBlbmQgPD0gUikgcmV0dXJuIHRyZWVbbm9kZV07CiAgICAgICAgcHVzaChub2RlLCBzdGFydCwgZW5kKTsKICAgICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICAgICAgcmV0dXJuIG1lcmdlKHF1ZXJ5KExFRlQsIHN0YXJ0LCBtaWQsIEwsIFIpLCBxdWVyeShSSUdIVCwgbWlkICsgMSwgZW5kLCBMLCBSKSk7CiAgICB9CgogICAgLy8gMC1pbmRleGVkCiAgICB2b2lkIHVwZGF0ZShpbnQgTCwgaW50IFIsIGludCB2YWwpewogICAgICAgIGlmKEwgPiBSKSByZXR1cm47CiAgICAgICAgdXBkYXRlKDAsIDAsIG4gLSAxLCBMLCBSLCB2YWwpOwogICAgfQogICAgTm9kZSBxdWVyeShpbnQgTCwgaW50IFIpIHsKICAgICAgICBpZihMID4gUikgcmV0dXJuIHswLCAwLCBJTkZ9OwogICAgICAgIHJldHVybiBxdWVyeSgwLCAwLCBuIC0gMSwgTCwgUik7CiAgICB9Cn07Cgp2ZWN0b3I8aW50PiBmbGF0OwppbnQgYVtOXSwgaW5bTl0sIG91dFtOXTsKdmVjdG9yPGludD4gZ1tOXTsKaW50IHRpbWVyID0gMDsKCnZvaWQgZGZzKGludCBub2RlLCBpbnQgcGFyKXsKICAgIGluW25vZGVdID0gdGltZXIrKzsKICAgIGZsYXQucHVzaF9iYWNrKGFbbm9kZV0pOwogICAgZm9yKGF1dG8gbmV4dCA6IGdbbm9kZV0pewogICAgICAgIGlmKG5leHQgPT0gcGFyKSBjb250aW51ZTsKICAgICAgICBkZnMobmV4dCwgbm9kZSk7CiAgICB9CiAgICBvdXRbbm9kZV0gPSB0aW1lciAtIDE7Cn0KCgp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpbnQgaCwgcDsKICAgICAgICBjaW4gPj4gaCA+PiBwOwogICAgICAgIGFbaV0gPSBoOwogICAgICAgIGdbaV0ucHVzaF9iYWNrKHApOwogICAgICAgIGdbcF0ucHVzaF9iYWNrKGkpOwogICAgfQogICAgLy8gZm9yKGludCBpID0gMDsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYVtpXSA8PCAnICc7CiAgICAvLyBjb3V0IDw8ICdcbic7CiAgICBkZnMoMCwgLTEpOwoKICAgIGludCBxOwogICAgY2luID4+IHE7CiAgICBTZWdUcmVlIHN0KGZsYXQpOwogICAgd2hpbGUocS0tKXsKICAgICAgICBpbnQgdCwgdiwgeDsKICAgICAgICBjaW4gPj4gdCA+PiB2OwogICAgICAgIGlmKHQgPT0gMSl7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICBzdC51cGRhdGUoaW5bdl0gKyAxLCBvdXRbdl0sIHgpOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBjb3V0IDw8IChvdXRbdl0gLSBpblt2XSkgLSBzdC5xdWVyeShpblt2XSArIDEsIG91dFt2XSkuemVybyA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KfQoKc2lnbmVkIG1haW4oKSB7CiAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgY2luLnRpZShudWxscHRyKTsKICBpbnQgdGMgPSAxOwogIC8vIGNpbiA+PiB0YzsKICBmb3IgKGludCBpID0gMDsgaSA8IHRjOyBpICs9IDEpIHsKICAgIHNvbHZlKCk7CiAgfQogIHJldHVybiAwOwp9Cg==