Cod sursa(job #2478004)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 21 octombrie 2019 14:48:32
Problema Lowest Common Ancestor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

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

const int Max=100005;
int tata[Max];
vector <int>v[Max]; int n,m; int nivel[Max];
void citire()
{
   in>>n>>m; tata[1]=1;
   for(int i=2;i<=n;i++)
   {
       int x; in>>x; tata[i]=x;
       v[x].push_back(i);
   }
}
void dfs(int nod,int tata=0)
{
    nivel[nod]=nivel[tata]+1;
    for(int j=0;j<v[nod].size();j++)
    {
        int vecin=v[nod][j];
        dfs(vecin,nod);
    }
}
int main()
{
    citire(); dfs(1);
    for(int i=1;i<=m;i++)
    {
        int x,y; in>>x>>y;
        while(x!=y)
        {
            if(nivel[x]>nivel[y])
                x=tata[x];
            else
                y=tata[y];
        }
        out<<x<<"\n";
    }

    return 0;
}