Cod sursa(job #1462427)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 18 iulie 2015 00:30:23
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
/*
	How about a coding trick?
	-Created by "EmanuelNrx"-
*/
#include <cstdio>
#include <vector>
#include <algorithm>
#define DIM 250010
using namespace std;

int N, M, K, X, Y, D[DIM+50000], St[DIM], T[DIM], Tata[DIM], val, pos, dep;
vector <int> V[DIM], Q[DIM];

void DFS(int nod){
	
	T[nod] = T[Tata[nod]] + 1;
	St[dep] = nod;
	dep = T[nod];
	
	for(int i = 0; i < Q[nod].size(); i += 2){
		
		val = Q[nod][i+0];
		pos = Q[nod][i+1];
		
		if(dep - val >= 1)
			D[pos] = St[dep - val];
		else
			D[pos] = 0;
	}
	
	for(int i = 0; i < V[nod].size(); i ++){
		
		vec = V[nod][i];
		DFS(vec);
	}
	
	return;
}

int main(){
	
	freopen("stramosi.in" ,"r", stdin );
	freopen("stramosi.out","w", stdout);
	
	scanf("%d %d", &N, &M);
	
	for(int i = 1; i <= N; i ++){
		
		scanf("%d", &X);
		V[X].push_back(i);
		Tata[i] = X;
	}
	
	for(int i = 1; i <= M; i ++){
		
		scanf("%d %d", &X, &Y);
		Q[X].push_back(Y);
		Q[X].push_back(i);	
	}
	
	DFS(0);
	
	for(int i = 1; i <= M; i ++)
		printf("%d\n", D[i]);
	
	fclose(stdin );
	fclose(stdout);
	
	return 0;
}