Cod sursa(job #712177)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 13 martie 2012 09:17:15
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <fstream>
#include <vector>
using namespace std;
int euler[1000010],First[250010],r;
int rez,n,m;
vector<int>v[250010];
void dfs(int x)
{
	euler[++r]=x;
	if(!First[x]) First[x]=r;
	for(int i=0;i<v[x].size();i++)
	{
		dfs(v[x][i]);
		euler[++r]=x;
	}
}
void query(int x,int p)
{
	if(p==1) 
		{rez=euler[x-1]; return ;}
	if(euler[x]==0) {rez=0; return; }
	x=euler[x-1];
	query(First[x],p-1);
}
int main()
{
	int i,p,q,x;
	ifstream fi("stramosi.in");
	ofstream fo("stramosi.out");
	fi>>n>>m;
	for(i=1;i<=n;i++)
	{
		fi>>x;
		v[x].push_back(i);
	}
	dfs(0);
	for(i=1;i<=m;i++)
	{
		fi>>q>>p;
		query(First[q],p);
		fo<<rez<<"\n";
	}
	return 0;
}