Cod sursa(job #1462407)

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

int N, M, K, X, Y, D[DIM], St[DIM];
vector <int> V[DIM], Q[DIM];

void DFS(int nod, int dep){
	
	St[dep] = nod;
	
	for(int i = 0; i < Q[nod].size(); i += 2){
		
		int val = Q[nod][i+0];
		int pos = Q[nod][i+1];
		
		D[pos] = St[ max(dep - val, 0) ];
	}
	
	for(int i = 0; i < V[nod].size(); i ++){
		
		int vec = V[nod][i];
		DFS(vec, dep + 1);
	}
	
	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);
	}
	
	for(int i = 1; i <= M; i ++){
		
		scanf("%d %d", &X, &Y);
		Q[X].push_back(Y);
		Q[X].push_back(i);	
	}
	
	DFS(0, 0);
	
	for(int i = 1; i <= M; i ++)
		printf("%d\n", D[i]);
	
	fclose(stdin );
	fclose(stdout);
	
	return 0;
}