Pagini recente » Cod sursa (job #2795229) | Cod sursa (job #2260550) | Cod sursa (job #2319826) | Cod sursa (job #2140655) | Cod sursa (job #2900891)
#include <bits/stdc++.h>
using namespace std;
const long long NR = 2e5 + 1;
int d[NR], parent[NR], lvl[NR], n, m;
vector<int> v[NR];
const int oo = 1e9;
void dfs(int nod, int prt) {
parent[nod] = prt;
lvl[nod] = 1 + lvl[prt];
for (auto it : v[nod]) {
if (it == prt) {
continue;
}
dfs(it, nod);
}
}
ifstream in("heavypath.in");
ofstream out("heavypath.out");
signed main() {
ios::sync_with_stdio(false);
in.tie();
int x, y, t;
in >> n >> m;
for (int i = 1; i <= n; ++i) {
in >> d[i];
}
for (int i = 1; i < n; ++i) {
in >> x >> y;
v[x].emplace_back(y);
v[y].emplace_back(x);
}
dfs(1, 0);
for (int i = 1; i <= m; ++i) {
in >> t >> x >> y;
if (t == 0) {
d[x] = y;
} else {
int res = -oo;
res = max(res, max(d[x], d[y]));
while (x != y) {
lvl[x] < lvl[y] ? y = parent[y] : x = parent[x];
res = max(res, max(d[x], d[y]));
}
out << res << '\n';
}
}
return 0;
}