Cod sursa(job #2232811)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 21 august 2018 10:12:18
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <iostream>
#include <fstream>
#define NMAX 10001

using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int N,M,t[NMAX],Lev[NMAX];
void DFs(int node, int level)
{
    Lev[node]=level;
    for(int i = 1; i <= N; i++)
        if(t[i]==node)
        DFs(i,level+1);
}
int main()
{

    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];
        }
        fout<<x<<'\n';
    }
    return 0;
}