Cod sursa(job #677370)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 10 februarie 2012 03:46:08
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <fstream>
#include <vector>
#include <stack>
#include <map>
using namespace std;

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

vector<int> G[NSIZE];

multimap<int, pair<int, int> > Tabel;

int Solutii[MSIZE];
bool viz[NSIZE];

vector<int> stramosi;
pair<multimap<int, pair<int, int> >::iterator, multimap<int, pair<int, int > >::iterator > intrebari;

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

	stiva.push(root);

	while(stiva.empty() == false)
	{
		int current = stiva.top();
		if(viz[current] == true)
		{
			stiva.pop();
			stramosi.pop_back();
			continue;
		}

		viz[current] = true;
		stramosi.push_back(current);

		for(unsigned int i = 0; i < G[current].size(); ++i)
		{
			stiva.push(G[current][i]);
		}

//		intrebari = Tabel.equal_range(current);
/*
		for( multimap<int, pair<int, int> >::iterator itr = intrebari.first;
			itr != intrebari.second;
			itr ++)
		{
			int P = itr->second.first;
			int index = itr->second.second;
			int raspuns;

			if((unsigned int) P > stramosi.size() -1 )
			{
				raspuns = 0;
			}
			else
			{
				raspuns = stramosi[stramosi.size() - 1 - P];
			}

			Solutii[index] = raspuns;
		}
*/
	}
}


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);
	}
	

	for(int i = 0 ; i < M; i++)
	{
		int Q, P;
		fin >> Q >> P;
		Tabel.insert(make_pair(Q, make_pair(P, i)));
	}

	DFS(0);

	for(int i = 0 ; i < M; i++)
	{
		fout << Solutii[i] << "\n";
	}

	fin.close();
	fout.close();
}