Cod sursa(job #660918)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 13 ianuarie 2012 14:49:14
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>
#include <vector>
using namespace std;
#define DIM 250001 

ifstream fi ("stramosi.in");
ofstream fo ("stramosi.out");

int N, M, P, Q;
int S[DIM][20];

void cit ()
{
	fi >> N >> M;
	for (int i = 1, x; i <= N; i++)
	{
		fi >> S[i][0];
	}
}

void prep ()
{
	int i, j;
	for (j = 1; j < 18; j++)
	{
		for (i = 1; i <= N; i++)
		{
			if (S[i][j-1] == 0)
				continue;
			S[i][j] = S[S[i][j-1]][j-1];
		}
	}
}

void calc ()
{
	for (int r = 17; r >= 0 && Q != 0; r--)
	{
		if (P >> r & 1)
		{
			Q = S[Q][r]; 
		}
	}
}

int main ()
{
	cit ();
	prep ();
	while (M--)
	{
		fi >> Q >> P;
		calc ();
		fo << Q << '\n';
	}
	return 0;
}