Cod sursa(job #1229690)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 17 septembrie 2014 22:31:29
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <vector>
#define max_n 250100
#define max_m 300100

using namespace std;

int n,m,rc;
vector <int > Gr[max_n];
vector <pair<int ,int> > queb[max_n];

int res[max_m],stack[max_n]; 

void read(){
    freopen("stramosi.in","r",stdin);
    int i;
    int x,y;
    scanf("%d %d", &n, &m);
    for(i=1;i<=n;i++){
        scanf("%d",&x);
        Gr[x].push_back(i);
    }
    for(i=1;i<=m;i++){
        scanf("%d %d",&x,&y);
        queb[x].push_back(make_pair(i,y));
    }
    
}

void depth_first(int node){
  stack[++rc]=node;
  for(vector <pair<int,int> > :: iterator it=queb[node].begin();it!=queb[node].end();it++){
      if(rc-it->second>1)res[it->first]=stack[rc-it->second];
      else        res[it->first]=0;
  }
  for(vector <int> :: iterator it=Gr[node].begin();it!=Gr[node].end();it++)
     depth_first(*it);
  stack[rc--]=0;
}

int main(void){
    read();
    depth_first(0);
    freopen("stramosi.out","w",stdout);
    for(int i=1;i<=m;i++)
        printf("%d\n",res[i]);
}