#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
// - Ta đã biết dist(u, v) = dist(1, u) + dist(1, v) - 2 * dist(1, lca(u, v))
// => Tức mọi truy vấn dist(u, v) đều có thể biến đổi thành các truy vấn có dạng dist(1, i) (1 <= i <= n)
// => Áp dụng bài Path Queries đã được học ở Chương Euler Tour
// - Nhưng lưu ý ở đây truy vấn update là update 1 cạnh chứ không phải update 1 đỉnh như bài Path Queries
// - Nhận xét: với mỗi đỉnh u trong cây (trừ đỉnh 1), ta có p[u] = cha của u, là duy nhất với mỗi u
// do đó với mỗi cạnh (u, p[u]) thì ta cho u làm đỉnh đại diện,
// đưa trọng số w của cạnh (u, p[u]) sang làm trọng số của đỉnh u -> a[u]
// - Làm như thế thì các truy vấn có dạng (anc, u) với anc là tổ tiên của u sẽ bị dư ra a[anc],
// nhưng riêng với trường hợp anc = 1 thì không sao cả tại vì a[1] = 0
const int N = 2e5 + 5;
const int LOG = 18;
struct AdjEdge {
int to;
int w;
int idx;
};
int n, q;
int a[N]; // a[u] = Trọng số của cạnh (u, p[u]) = Trọng số của cạnh do u đại diện
vector<AdjEdge> adj[N];
int edge_to_node[N]; // edge_to_node[i] = Đỉnh đại diện cho cạnh thứ i
int up[LOG][N];
int tin[N], tout[N], timer;
void dfs(int u, int p) {
tin[u] = ++timer;
up[0][u] = p;
for (int i = 1; i < LOG; i++) {
up[i][u] = up[i - 1][up[i - 1][u]];
}
for (auto e : adj[u]) {
int v = e.to;
if (v == p) continue;
edge_to_node[e.idx] = v;
a[v] = e.w;
dfs(v, u);
}
tout[u] = ++timer;
}
bool isAncestor(int u, int v) {
return (tin[u] <= tin[v] && tout[v] <= tout[u]);
}
int lca(int u, int v) {
if (isAncestor(u, v)) return u;
if (isAncestor(v, u)) return v;
for (int i = LOG - 1; i >= 0; i--) {
if (!isAncestor(up[i][u], v)) {
u = up[i][u];
}
}
return up[0][u];
}
struct Fenwick {
int n;
vector<ll> ft;
Fenwick(int n) : n(n) {
ft.resize(n, 0);
}
void update(int pos, int val) {
for (; pos < n; pos += pos & (-pos)) {
ft[pos] += val;
}
}
ll get(int pos) {
ll ans = 0;
for (; pos > 0; pos -= pos & (-pos)) {
ans += ft[pos];
}
return ans;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n - 1; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w, i});
adj[v].push_back({u, w, i});
}
cin >> q;
timer = 0;
dfs(1, 1);
Fenwick fenw(2 * n + 1);
for (int u = 1; u <= n; u++) {
fenw.update(tin[u], a[u]);
fenw.update(tout[u], -a[u]);
}
while (q--) {
int type; cin >> type;
if (type == 1) {
int i, w;
cin >> i >> w;
int u = edge_to_node[i];
fenw.update(tin[u], -a[u] + w);
fenw.update(tout[u], a[u] - w);
a[u] = w;
}
else {
int u, v;
cin >> u >> v;
ll dist = fenw.get(tin[u]) + fenw.get(tin[v]) - 2 * fenw.get(tin[lca(u, v)]);
cout << dist << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKLy8gLSBUYSDEkcOjIGJp4bq/dCBkaXN0KHUsIHYpID0gZGlzdCgxLCB1KSArIGRpc3QoMSwgdikgLSAyICogZGlzdCgxLCBsY2EodSwgdikpCi8vID0+IFThu6ljIG3hu41pIHRydXkgduG6pW4gZGlzdCh1LCB2KSDEkeG7gXUgY8OzIHRo4buDIGJp4bq/biDEkeG7lWkgdGjDoG5oIGPDoWMgdHJ1eSB24bqlbiBjw7MgZOG6oW5nIGRpc3QoMSwgaSkgKDEgPD0gaSA8PSBuKSAgCi8vID0+IMOBcCBk4bulbmcgYsOgaSBQYXRoIFF1ZXJpZXMgxJHDoyDEkcaw4bujYyBo4buNYyDhu58gQ2jGsMahbmcgRXVsZXIgVG91cgovLyAtIE5oxrBuZyBsxrB1IMO9IOG7nyDEkcOieSB0cnV5IHbhuqVuIHVwZGF0ZSBsw6AgdXBkYXRlIDEgY+G6oW5oIGNo4bupIGtow7RuZyBwaOG6o2kgdXBkYXRlIDEgxJHhu4luaCBuaMawIGLDoGkgUGF0aCBRdWVyaWVzCi8vIC0gTmjhuq1uIHjDqXQ6IHbhu5tpIG3hu5dpIMSR4buJbmggdSB0cm9uZyBjw6J5ICh0cuG7qyDEkeG7iW5oIDEpLCB0YSBjw7MgcFt1XSA9IGNoYSBj4bunYSB1LCBsw6AgZHV5IG5o4bqldCB24bubaSBt4buXaSB1IAovLyAgICAgICAgICAgICBkbyDEkcOzIHbhu5tpIG3hu5dpIGPhuqFuaCAodSwgcFt1XSkgdGjDrCB0YSBjaG8gdSBsw6BtIMSR4buJbmggxJHhuqFpIGRp4buHbiwKLy8gICAgICAgICAgICAgxJHGsGEgdHLhu41uZyBz4buRIHcgY+G7p2EgY+G6oW5oICh1LCBwW3VdKSBzYW5nIGzDoG0gdHLhu41uZyBz4buRIGPhu6dhIMSR4buJbmggdSAtPiBhW3VdCi8vIC0gTMOgbSBuaMawIHRo4bq/IHRow6wgY8OhYyB0cnV5IHbhuqVuIGPDsyBk4bqhbmcgKGFuYywgdSkgduG7m2kgYW5jIGzDoCB04buVIHRpw6puIGPhu6dhIHUgc+G6vSBi4buLIGTGsCByYSBhW2FuY10sIAovLyAgIG5oxrBuZyByacOqbmcgduG7m2kgdHLGsOG7nW5nIGjhu6NwIGFuYyA9IDEgdGjDrCBraMO0bmcgc2FvIGPhuqMgdOG6oWkgdsOsIGFbMV0gPSAwCgpjb25zdCBpbnQgTiA9IDJlNSArIDU7IApjb25zdCBpbnQgTE9HID0gMTg7ICAKCnN0cnVjdCBBZGpFZGdlIHsKCWludCB0bzsgCglpbnQgdzsgCglpbnQgaWR4OyAKfTsgCgppbnQgbiwgcTsgCmludCBhW05dOyAvLyBhW3VdID0gVHLhu41uZyBz4buRIGPhu6dhIGPhuqFuaCAodSwgcFt1XSkgPSBUcuG7jW5nIHPhu5EgY+G7p2EgY+G6oW5oIGRvIHUgxJHhuqFpIGRp4buHbiAKdmVjdG9yPEFkakVkZ2U+IGFkaltOXTsgCmludCBlZGdlX3RvX25vZGVbTl07IC8vIGVkZ2VfdG9fbm9kZVtpXSA9IMSQ4buJbmggxJHhuqFpIGRp4buHbiBjaG8gY+G6oW5oIHRo4bupIGkgCgppbnQgdXBbTE9HXVtOXTsgCmludCB0aW5bTl0sIHRvdXRbTl0sIHRpbWVyOyAgIAoKdm9pZCBkZnMoaW50IHUsIGludCBwKSB7Cgl0aW5bdV0gPSArK3RpbWVyOyAgCgl1cFswXVt1XSA9IHA7ICAgCglmb3IgKGludCBpID0gMTsgaSA8IExPRzsgaSsrKSB7CgkJdXBbaV1bdV0gPSB1cFtpIC0gMV1bdXBbaSAtIDFdW3VdXTsgCgl9Cglmb3IgKGF1dG8gZSA6IGFkalt1XSkgewoJCWludCB2ID0gZS50bzsgCgkJaWYgKHYgPT0gcCkgY29udGludWU7ICAKCQllZGdlX3RvX25vZGVbZS5pZHhdID0gdjsgCgkJYVt2XSA9IGUudzsgIAoJCWRmcyh2LCB1KTsKCX0KCXRvdXRbdV0gPSArK3RpbWVyOyAKfQoKYm9vbCBpc0FuY2VzdG9yKGludCB1LCBpbnQgdikgewoJcmV0dXJuICh0aW5bdV0gPD0gdGluW3ZdICYmIHRvdXRbdl0gPD0gdG91dFt1XSk7IAp9CgppbnQgbGNhKGludCB1LCBpbnQgdikgewoJaWYgKGlzQW5jZXN0b3IodSwgdikpIHJldHVybiB1OyAgCglpZiAoaXNBbmNlc3Rvcih2LCB1KSkgcmV0dXJuIHY7ICAKCWZvciAoaW50IGkgPSBMT0cgLSAxOyBpID49IDA7IGktLSkgewoJCWlmICghaXNBbmNlc3Rvcih1cFtpXVt1XSwgdikpIHsKCQkJdSA9IHVwW2ldW3VdOyAKCQl9Cgl9CglyZXR1cm4gdXBbMF1bdV07IAp9CgpzdHJ1Y3QgRmVud2ljayB7CglpbnQgbjsgIAoJdmVjdG9yPGxsPiBmdDsgIAoKCUZlbndpY2soaW50IG4pIDogbihuKSB7CgkJZnQucmVzaXplKG4sIDApOyAgCgl9CgoJdm9pZCB1cGRhdGUoaW50IHBvcywgaW50IHZhbCkgewoJCWZvciAoOyBwb3MgPCBuOyBwb3MgKz0gcG9zICYgKC1wb3MpKSB7CgkJCWZ0W3Bvc10gKz0gdmFsOyAKCQl9Cgl9CgoJbGwgZ2V0KGludCBwb3MpIHsKCQlsbCBhbnMgPSAwOyAKCQlmb3IgKDsgcG9zID4gMDsgcG9zIC09IHBvcyAmICgtcG9zKSkgewoJCQlhbnMgKz0gZnRbcG9zXTsKCQl9CgkJcmV0dXJuIGFuczsgIAoJfQp9OyAKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG4gLSAxOyBpKyspIHsKCQlpbnQgdSwgdiwgdzsgCgkJY2luID4+IHUgPj4gdiA+PiB3OyAKCQlhZGpbdV0ucHVzaF9iYWNrKHt2LCB3LCBpfSk7CgkJYWRqW3ZdLnB1c2hfYmFjayh7dSwgdywgaX0pOyAgIAoJfQoJY2luID4+IHE7IAoJCgl0aW1lciA9IDA7ICAKCWRmcygxLCAxKTsgIAoKCUZlbndpY2sgZmVudygyICogbiArIDEpOyAgIAkKCWZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgewoJCWZlbncudXBkYXRlKHRpblt1XSwgYVt1XSk7ICAKCQlmZW53LnVwZGF0ZSh0b3V0W3VdLCAtYVt1XSk7IAoJfQoKCXdoaWxlIChxLS0pIHsKCQlpbnQgdHlwZTsgY2luID4+IHR5cGU7IAoKCQlpZiAodHlwZSA9PSAxKSB7CgkJCWludCBpLCB3OyAKCQkJY2luID4+IGkgPj4gdzsgCgkJCWludCB1ID0gZWRnZV90b19ub2RlW2ldOyAKCQkJZmVudy51cGRhdGUodGluW3VdLCAtYVt1XSArIHcpOyAgCgkJCWZlbncudXBkYXRlKHRvdXRbdV0sIGFbdV0gLSB3KTsgCgkJCWFbdV0gPSB3OyAKCQl9CgkJZWxzZSB7CgkJCWludCB1LCB2OyAKCQkJY2luID4+IHUgPj4gdjsgIAkKCQkJbGwgZGlzdCA9IGZlbncuZ2V0KHRpblt1XSkgKyBmZW53LmdldCh0aW5bdl0pIC0gMiAqIGZlbncuZ2V0KHRpbltsY2EodSwgdildKTsgCgkJCWNvdXQgPDwgZGlzdCA8PCAnXG4nOyAKCQl9Cgl9Cn0=