Cod sursa(job #2416938)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 28 aprilie 2019 17:12:57
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define Dim 100009
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int N,M,val,Tata[Dim],Level[Dim],A,B;
bool viz[Dim];

vector <int> V[Dim];

void DFS(int nod,int niv,int prec)
{
    Level[nod]=niv;
    Tata[nod]=prec;
    viz[nod]=1;
    for(unsigned int i=0;i<V[nod].size();i++)
    {
        int vecin=V[nod][i];
        if(!viz[vecin])
        DFS(vecin,niv+1,nod);
    }
}

int main()
{
    f>>N>>M;
    for(int i=2;i<=N;i++)
    {
        f>>val;
        V[i].push_back(val);
        V[val].push_back(i);
    }
    DFS(1,1,1);
    for(int i=1;i<=M;i++)
    {
        f>>A>>B;
        while(Tata[A]!=Tata[B])
        if(Level[A]>=Level[B]) A=Tata[A];
        else B=Tata[B];

        if(A!=B)
        g<<Tata[A]<<'\n';
        else
        g<<A<<'\n';
    }
    return 0;
}