Cod sursa(job #1490105)

Utilizator roadtojediWilly Fog roadtojedi Data 22 septembrie 2015 18:51:58
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
// Problema Stramosi O ( N + M )
#include <iostream>
#include <vector>
#include <fstream>
#include <stack>
using namespace std;

const int NMax = 400000;
const int MMax = 400000;
int n, m ;
vector<int> G[NMax];
vector< pair<int, int> > Queries[MMax];
int raspuns[MMax], uz [NMax];
vector<int> stiva;

void dfs(int nod){
    stiva.push_back(nod);
    uz[nod] = 1;
    for(auto it = Queries[nod].begin(); it != Queries[nod].end(); it++){
        if((int)stiva.size() - it->first -1 >= 0)
        {
            raspuns[it->second] = stiva[(int)stiva.size() - it->first - 1];
        }
        else
            raspuns[it->second] = 0;
    }
    for(auto it  = G[nod].begin(); it != G[nod].end(); it++){
        if(!uz[*it])
            dfs(*it);
    }
    stiva.pop_back();

}

int main(){
    int i;
    ifstream f("stramosi.in");
    ofstream g("stramosi.out");
    f>>n>>m;
    int x;
    for(i = 1 ; i <= n; i++){
        f>>x;
        G[x].push_back(i);
    }
    int y;
    for(i = 1; i <= m; i++){
        f>>x>>y;
        Queries[x].push_back({y,i});
    }
    dfs(0);
    for(i = 1; i <= m; i++)
        g<<raspuns[i]<<"\n";
    return 0;
}