Cod sursa(job #1435133)

Utilizator tudor00Stoiean Tudor tudor00 Data 12 mai 2015 11:20:23
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>

using namespace std;

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

const int NMAX=100010;

int n,i,x,a,b;
int niv[NMAX],tata[NMAX];
long long teste;

int main()
{
    in>>n>>teste;
    niv[1]=0;
    tata[1]=1;
    for(i=2;i<=n;i++)
    {
        in>>tata[i];
        niv[i]=niv[tata[i]]+1;
    }
    for(i=1;i<=teste;i++)
    {
        in>>a>>b;
        while(niv[a]<niv[b])
        {
            b=tata[b];
        }

        while(niv[b]<niv[a])
        {
            a=tata[a];
        }

        while(a!=b)
        {
            a=tata[a];
            b=tata[b];
        }
        out<<a<<'\n';
    }
    in.close();
    out.close();
    return 0;
}