Cod sursa(job #1287565)

Utilizator LegionHagiu Stefan Legion Data 7 decembrie 2014 20:41:20
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
using namespace std;
int g[250001][20];
const int doi[20] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288 };
ofstream out("stramosi.out");
void marcheaza(int n)
{
	int c = g[n][0],p=0;
	while (g[c][p] != 0)
	{
		g[n][p+1] = g[c][p];
		c = g[c][p];
		p++;
	}
}
void calculeaza(int p, int q)
{
	int t = 18;
	while (doi[t] > p)
	{
		if (t == -1){ break; }
		t--;
	}
	if (doi[t] == p){ out << g[q][t]<<"\n"; }
	else if (t == -1){ out << 0 << "\n"; }
	else
	{
		calculeaza(p - doi[t], g[q][t]);
	}
}
int main()
{
	ifstream in("stramosi.in");
	int i, n,m,p,q,j,t;
	in >> n;
	in >> m;
	for (i = 1; i <= n; i++)
	{
		in >> g[i][0];
		marcheaza(i); 
	}
	for (i = 1; i <= m; i++)
	{
		in >> q;
		in >> p;
		calculeaza(p, q);
	}

}