Cod sursa(job #1295148)

Utilizator vgabi94Vaduva Gabriel vgabi94 Data 18 decembrie 2014 21:11:52
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
using namespace std;

int ancestor[20][250000];

int findAncestor(int q, int p, int level)
{
	for (int i = level; i >= 0; i--) {
		if ((1 << i) & p)
			q = ancestor[i][q]; 	
	}

	return q;
}

int computeAncestors(int n)
{
	int i, z;
	for (i = 1, z = 2; z <= n; i++, z <<= 1) {
		for (int j = 1; j <= n; j++) {
			ancestor[i][j] = ancestor[i - 1][ancestor[i - 1][j]];
		}
	}

	return i - 1;
}

int main()
{
	ifstream in("stramosi.in");
	ofstream out("stramosi.out");
	int N, M, Q, P;
	in >> N >> M;

	for (int i = 1; i <= N; i++) {
		in >> ancestor[0][i];
	}

	int lastLevel = computeAncestors(N);

	for (int i = 0; i < M; i++) {
		in >> Q >> P;
		out << findAncestor(Q, P, lastLevel) << '\n';
	}

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