Cod sursa(job #2091055)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 19 decembrie 2017 08:35:37
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
using namespace std;
int v[100002],niv[100002];
int lca(int x,int y)
{
    if(niv[x]==niv[y])
    {
        if(x==y)
            return x;
        lca(v[x],v[y]);
    }
    else
    {
        while(niv[x]>niv[y])
        {
            x=v[x];
        }
        while(niv[x]<niv[y])
        {
            y=v[y];
        }
    }
}
int main()
{
    int n,m,i,a,b;
    ifstream in("lca.in");
    ofstream out("lca.out");
    in>>n>>m;
    niv[1]=1;
    for(i=2;i<=n;i++)
    {
        in>>v[i];
        niv[i]=niv[v[i]]+1;
    }
    for(i=1;i<=m;i++)
    {
        in>>a>>b;
        out<<lca(a,b)<<"\n";
    }
    return 0;
}