Cod sursa(job #1462428)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 18 iulie 2015 00:31:04
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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];
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];
         
        if(dep - val >= 1)
            D[pos] = St[dep - val];
        else
            D[pos] = 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;
}