Cod sursa(job #2793714)

Utilizator RaduNichitaRadu Nichita RaduNichita Data 3 noiembrie 2021 22:01:08
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

int main() {
    std::ifstream fin("lca.in");
    std::ofstream fout("lca.out");

    int n, queries;
    std::vector<int64_t> v;
    std::vector<int64_t> p;
    fin >> n >> queries;
    v.resize(n + 1);
    p.resize(n + 1);

    for (int i = 2; i <= n; i++) {
        int x;
        fin >> x;
        v[i] = v[x] + 1;
        p[i] = x; 
    }

    for (int i = 0; i < queries; ++i) {
        int x, y;
        fin >> x >> y;

        if (x == y) {
            fout << x << "\n";
            continue;
        }

        if (x == 1 || y == 1) {
            fout << 1 << "\n";
            continue;
        }

        while (x != y) {
            if (p[x] < p[y]) {
                y = p[y];
            } else {
                x = p[x];
            } 
        }
        fout << x << "\n";
    }

    fin.close();
    fout.close();
    return 0;
}