Cod sursa(job #2989744)

Utilizator NarcisMMic Narcis NarcisM Data 6 martie 2023 22:43:06
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int N, M, pos[250002], x, useit, nouse;
vector<int> V[250002], Qs[250002], now, rem;
pair<int, int> Q[300002];
void Dfs(){
    now.push_back(x);
    for(nouse = 0; nouse < Qs[x].size(); ++nouse){
        if(Qs[x][nouse] > now.size() - 1)
            Qs[x][nouse] = 0;
        else
            Qs[x][nouse] = now[now.size() - 1 - Qs[x][nouse]];
    }
    for(useit = 0; useit < V[x].size(); ++useit){
        rem.push_back(useit);
        x = V[x][useit];
        Dfs();
        useit = rem.back();
        rem.pop_back();
        x = now.back();
    }
    now.pop_back();
}
int main(){
    fin >> N >> M;
    for(int i = 1, aux; i <= N; ++i){
        fin >> aux;
        V[aux].push_back(i);
    }
    for(int i = 1; i <= M; ++i){
        fin >> Q[i].first >> Q[i].second;
        Qs[Q[i].first].push_back(Q[i].second);
    }
    Dfs();
    for(int i = 1; i <= M; ++i){
        fout << Qs[Q[i].first][pos[Q[i].first]] << '\n';
        ++pos[Q[i].first];
    }
    return 0;
}