Cod sursa(job #2232560)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 20 august 2018 10:19:10
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int N,M,viz[NMAX],T[NMAX];
void findLCA(int x, int y)
{
    for(int i = 1; i <= NMAX; i++)
       viz[i]=0;

    int rx=x;
    int ry=y;
    while(T[rx])
    {
       viz[rx]++;
        rx=T[rx];
    }
    viz[rx]++;
    while(T[ry])
    {
        viz[ry]++;
        if(viz[ry]==2)
        {
            fout<<ry<<" "<<'\n';
            break;
        }
        ry=T[ry];
    }
    viz[ry]++;
    if(viz[ry]==2) fout<<ry<<" "<<'\n';

}
int main()
{

    fin>>N>>M;
    for(int i = 1; i < N; i++)
    {
        int x;
        fin>>x;
        T[i+1]=x;
    }
    T[1]=0;
    while(M--)
    {
        int p,q;
        fin>>p>>q;
        findLCA(p,q);
    }
    return 0;

}