Cod sursa(job #2213718)

Utilizator unknownpersonBidasca Carina Georgiana unknownperson Data 16 iunie 2018 23:47:52
Problema Lowest Common Ancestor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <bits/stdc++.h>
using namespace std;
const int MAX_N=100005;
ifstream f("lca.in");
ofstream g("lca.out");
int N, M, T[MAX_N], niv[MAX_N];
void dfs(int,int);
int main()
{

    f>>N>>M;
    for(int i = 2; i <= N; ++i)
        f>>T[i];
    dfs(1, 0);
    for(int i = 1; i <= M; ++i)
    {
        int x, y;
        f>>x>>y;

        while(x != y)
            if(niv[x] > niv[y])
                x = T[x];
            else
                y = T[y];

        g<<x<<"\n";
    }
}
void dfs(int nod, int lev)
{
    niv[nod] = lev;
    for(int i = 1; i <= N; ++i)
        if(T[i] == nod)
            dfs(i, lev+1);
}