Cod sursa(job #674621)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 6 februarie 2012 16:13:41
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>
#include <utility>
using namespace std;
#define dim 300003 

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

int N, M, S[dim], R[dim];
vector <int> V[dim];
vector < pair <int, int> > Q[dim];

void cit ()
{
	fi >> N >> M;
	for (int i = 1, x; i <= N; i++)
	{
		fi >> x;
		V[x].push_back (i);
	}
	for (int i = 1, q, p; i <= M; i++)
	{
		fi >> q >> p;
		Q[q].push_back (make_pair (i, p));
	}
}

void dfs (int n, int k)
{
	S[k] = n;
	
	for (int i = 0, j, r; i < Q[n].size(); i++)
	{
		j = Q[n][i].first;
		r = Q[n][i].second;
		if (r < k)
			r = S[k - r];
		else
			r = 0;
		R[j] = r;
	}
	
	for (int i = 0, f; i < V[n].size(); i++)
	{
		f = V[n][i];
		dfs (f, k + 1);
	}	
}

void afi ()
{
	for (int i = 1; i <= M; i++)
	{
		fo << R[i] << '\n';
	}
}

int main ()
{
	cit ();
	dfs (0, 0);
	afi ();
	return 0;
}