Cod sursa(job #368458)

Utilizator Mishu91Andrei Misarca Mishu91 Data 24 noiembrie 2009 22:02:41
Problema Lowest Common Ancestor Scor Ascuns
Compilator cpp Status done
Runda Marime 0.52 kb
#include <cstdio>

#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()
{
	freopen("lca.in","rt",stdin);
	freopen("lca.out","wt",stdout);

	scanf("%d %d\n", &N, &M);

	for(int i = 2; i <= N; ++i)
		scanf("%d ",T+i);

	dfs(1, 0);

	for(int i = 1; i <= M; ++i)
	{
		int x, y;
		scanf("%d %d\n",&x, &y);

		while(x != y)
			if(Lev[x] > Lev[y])
				x = T[x];
			else
				y = T[y];

		printf("%d\n", x);
	}
}