Cod sursa(job #2759051)

Utilizator CRazvaN6Cutuliga Razvan CRazvaN6 Data 14 iunie 2021 23:21:43
Problema Lowest Common Ancestor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.53 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
#define MAX_N 100005
int N, M, T[MAX_N], Lev[MAX_N];

void dfs(int nod, int lev)
{
	Lev[nod] = lev;

	for(int i = 1; i <= N; ++i)
		if(T[i] == nod)
			dfs(i, lev+1);
}

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(Lev[x] > Lev[y])
				x = T[x];
			else
				y = T[y];

		g << x << '\n';
	}
}