Cod sursa(job #1464789)

Utilizator TeodorescuStefanEduardTeodorescu Stefan Eduard TeodorescuStefanEduard Data 24 iulie 2015 18:38:41
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <iostream>
#include <fstream>

using namespace std;

fstream in("lca.in", ios::in);
fstream out("lca.out", ios::out);

#define nmax 100001

int n,m,t[nmax],l[nmax];

int lca(int,int);

int main()
{
	int i,j;

	in>>n>>m;

	for(i=2;i<=n;i++)
	{
		in>>t[i];
		l[i]=1+l[t[i]];
	}


	while(in>>i>>j)
		out<<lca(i,j)<<"\n";





    in.close();
    out.close();

	return 0;
}




int lca(int a,int b)
{
	while(l[a]!=l[b])
		if(l[a]>l[b])
			a=t[a];
		else
			b=t[b];
	while(a!=b)
	{
		a=t[a];
		b=t[b];
	}

	return a;

}