Cod sursa(job #2094089)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 25 decembrie 2017 01:13:03
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>
#define VAL 250005
#define QUER 300005

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

int N, M, i, j;
int A, B, fat[VAL];
int ans[QUER];
int st[VAL], top;
vector <int> G[VAL];
vector < pair <int, int> > Q[VAL];

void DFS(int nod)
{
	vector <int> :: iterator it;
	vector < pair <int, int> > :: iterator it2;
	st[++top]=nod;
	for (it=G[nod].begin(); it!=G[nod].end(); it++)
	{
		for (it2=Q[*it].begin(); it2!=Q[*it].end(); it2++)
		  if (top-it2->first+1>0)
		    ans[it2->second]=st[top-it2->first+1];
		DFS(*it);
	}
	top--;
}

int main()
{
	fin >> N >> M;
	for (i=1; i<=N; i++)
	{
		fin >> fat[i];
		G[fat[i]].push_back(i);
	}
	for (i=1; i<=M; i++)
	{
		fin >> A >> B;
		Q[A].push_back(make_pair(B, i));
	}
	for (i=1; i<=N; i++)
	  if (fat[i]==0)
	    DFS(i);
	for (i=1; i<=M; i++)
	  fout << ans[i] << '\n';
	fin.close();
	fout.close();
	return 0;
}