Cod sursa(job #2701489)

Utilizator Katherine456719Swan Katherine Katherine456719 Data 31 ianuarie 2021 15:13:26
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <bits/stdc++.h>
#define MAX_N 100005
using namespace std;
int N, M, T[MAX_N], Lev[MAX_N];

void dfs(int nod, int lev)
{
    Lev[nod] = lev;

    for(int i = 1; i <= N; ++i)
        if(T[i] == nod)
            dfs(i, lev+1);
}

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

    fin >> N >> M;

    for(int i = 2; i <= N; ++i)
        fin >> T[i];

    dfs(1, 0);

    for(int i = 1; i <= M; ++i)
    {
        int x, y;
        fin >> x >> y;

        while(x != y)
            if(Lev[x] > Lev[y])
                x = T[x];
            else
                y = T[y];

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