Cod sursa(job #2900891)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 12 mai 2022 14:11:51
Problema Heavy Path Decomposition Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#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;
}