Cod sursa(job #780597)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 20 august 2012 20:34:14
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#include<vector>
const int maxx1=250005,maxx2=350000;
using namespace std;
int stiva[maxx2],n,m,i,a,b,nr,ans[maxx2],q[maxx2],tata[maxx2];
vector <int> quest[maxx2],x[maxx2];
void df(int nod)
{
	int i;
	stiva[++nr]=nod;
	for(i=0;i<quest[nod].size();i++)
		if(q[quest[nod][i]]>=nr)
			ans[quest[nod][i]]=0;
		else
			ans[quest[nod][i]]=stiva[nr-q[quest[nod][i]]];
	for(i=0;i<x[nod].size();i++)
		if(tata[nod]!=x[nod][i])
			df(x[nod][i]);
	nr--;
}
int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&tata[i]);
		x[tata[i]].push_back(i);
		x[i].push_back(tata[i]);
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d %d",&a,&b);
		quest[a].push_back(i);
		q[i]=b;
	}
	for(i=1;i<=n;i++)
		if(tata[i]==0)
			df(i);
	for(i=1;i<=m;i++)
		printf("%d\n",ans[i]);
	return 0;
}