Cod sursa(job #2155361)

Utilizator Y0da1NUME JMECHER Y0da1 Data 7 martie 2018 20:12:30
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <fstream>

using namespace std;
int N, M;
int T [100005];
int D [100005];

void defeu(int nod)
{


    for(int i = 1; i <= N; ++i)
        if(T[i] == nod)
        {
            D[i] = D[nod] + 1;
            defeu(i);
        }
}

int main()
{
    ifstream in ("lca.in");
    ofstream out ("lca.out");
    in>>N>>M;
    for(int i = 1; i < N; ++i)
    {
        int x;
        in>>x;
        T[i + 1] = x;
    }
    D[1] = 1;
    defeu(1);

    for(int i = 1; i <= M; ++i)
    {
        int x, y;
        in>>x>>y;
        while(x != y)
            if(D[x] > D[y])
                x = T[x];
            else
                y = T[y];
        out<<x<<"\n";
    }

    return 0;
}