Cod sursa(job #2660798)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 20 octombrie 2020 15:49:40
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.47 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("lca.in");
ofstream out("lca.out");
int nivel[100005],v[100005];

int n,m;
void dfs(int nod,int lvl)
{
	nivel[nod]=lvl;
	for(int i=1;i<=n;i++)
		if(v[i]==nod)
			dfs(i,lvl+1);
}
int main()
{
	int n,m;
	in>>n>>m;
	for(int i=2;i<=n;i++)
		in>>v[i];

	dfs(1,0);

	for(int i=1;i<=m;i++)
	{
		int x,y;
		in>>x>>y;
		while(x!=y)
		{
			if(nivel[x]>nivel[y])
				x=v[x];
			else
				y=v[y];
		}
		out<<y<<"\n";
	}
	return 0;
}