Cod sursa(job #2120981)

Utilizator vancea.catalincatalin vancea.catalin Data 3 februarie 2018 10:37:30
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include<iostream>
#include<fstream>
#include<vector>

using namespace std;
fstream fin("lca.in",ios::in), fout("lca.out",ios::out);
int t[100100],niv[100100],n,m;
vector<int> v[100100];
void dfs(int nod,int nivel)
{
	niv[nod]=nivel;
	for(auto x: v[nod])
	{
		dfs(x,nivel+1);
	}
}



int main()
{
	int i,a,b;
	fin>>n>>m;
	for(i=2;i<=n;i++)
	{
		fin>>t[i];
		v[t[i]].push_back(i);
	}
	dfs(1,1);
	for(i=1;i<=m;i++)
	{
		fin>>a>>b;
		
		while(niv[a]<niv[b]) b=t[b];
		while(niv[a]>niv[b]) a=t[a];
		while(a!=b)
		{
			a=t[a];
			b=t[b];
		}
		fout<<a<<"\n";
	}
}