Cod sursa(job #3357726)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 13:15:25
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("lca.in");
ofstream cout("lca.out");

vector<vector<int>> gr(100100);
vector<int> dad(100100);
vector<int> lv(100100);

void dfs(int node, int parent, int level) {
    dad[node] = parent;
    lv[node] = level;
    for (auto& child : gr[node]) {
        dfs(child, node, level + 1);
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n, m;
    cin >> n >> m;

    for (int i = 2; i <= n; i++) {
        cin >> dad[i];
        gr[dad[i]].push_back(i);
    }

    dfs(1, 0, 0);

    for (int i = 0; i < m; i++) {
        int x, y;
        cin >> x >> y;

        while (lv[x] > lv[y]) {
            x = dad[x];
        }
        while (lv[y] > lv[x]) {
            y = dad[y];
        }

        while (x != y) {
            x = dad[x];
            y = dad[y];
        }

        cout << x << '\n';
    }

    return 0;
}