Cod sursa(job #393345)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 9 februarie 2010 11:54:46
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>
#include<vector>
#define Nmax 250010
#define Mmax 300010
using namespace std;

vector<int> V[Nmax],M[Nmax],Idx[Nmax];
int Sol[Mmax],n,i,j,S[Nmax],x,p,q,m;

void dfs(int nod, int nivel)
{
	S[nivel]=nod;
	
	int N=M[nod].size(),i;
	
	for(i=0;i<N;i++)
		if(nivel>M[nod][i]) Sol[ Idx[nod][i] ] = S[ nivel-M[nod][i] ];
	N=V[nod].size();
		
	for(i=0;i<N;i++)
		dfs(V[nod][i],nivel+1);
}

	


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",&x);
		V[x].push_back(i);
	}
	
	for(i=1;i<=m;i++)
	{
		scanf("%d %d",&q,&p);
		M[q].push_back(p);
		Idx[q].push_back(i);
	}
		
	dfs(0,1);
	
	for(i=1;i<=m;i++)
		printf("%d\n",Sol[i]);
	return 0;
}