Cod sursa(job #677305)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 9 februarie 2012 23:49:49
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>
#include <stack>
using namespace std;

#define NSIZE 250001
const char* infile = "stramosi.in";
const char* outfile = "stramosi.out";

vector<int> G[NSIZE];
vector<int> S[NSIZE];

void DFS(int root)
{
	stack<int> stiva;
	stiva.push(root);

	while(stiva.empty() == false)
	{
		int curent = stiva.top();
		stiva.pop();

		for(unsigned int i = 0 ; i < G[curent].size(); i++)
		{
			int child = G[curent][i];
			S[child].push_back(curent);
			S[child].insert(S[child].end(), S[curent].begin(), S[curent].end());

			stiva.push(child);
		}
	}
}

int stramos( int Q, int P ) 
{
	if(P <= S[Q].size())
		return S[Q][P - 1];
	else
	{
		return 0;
	}
}

int main()
{
	fstream fin(infile, ios::in);
	fstream fout(outfile, ios::out);
	int N, M;
	fin >> N >> M;

	for(int i = 0 ; i < N; i++)
	{
		int parinte;
		fin >> parinte;
		G[parinte].push_back(i+1);
	}
	DFS(0);

	for(int i = 0 ; i < M; i++)
	{
		int Q, P;
		fin >> Q >> P;
		fout << stramos(Q, P) << "\n";
	}
	fin.close();
	fout.close();
}