Cod sursa(job #3173617)

Utilizator euInScoalaEu sunt acum in scoala euInScoala Data 23 noiembrie 2023 13:16:53
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

using VI = vector<int>;
using VVI = vector<VI>;
using PI = vector<pair<int, int>>;
using VVP = vector<PI>;

int n, m;
VVI G;
VVP Q;
VI R;

VI drum;
void df(int node) {
    //cout << node << '\n';
    for(auto [num, i] : Q[node]) {
        if(drum.size() >= num)
            R[i] = drum[drum.size() - num];
    }
    drum.push_back(node);
    for(int y : G[node]) {
        df(y);
    }
    drum.pop_back();
}

int main(){
    cin >> n >> m;
    G = VVI(n+1);
    Q = VVP(n+1);
    R = VI(m);
    int x, num;
    for(int i=1; i<=n; ++i) {
        cin >> x;
        G[x].push_back(i);
    }
    for(int i=0; i<m; ++i) {
        cin >> x >> num;
        Q[x].emplace_back(num, i);
    }
    df(0);
    //cout << "DONE\n";
    for(int i=0; i<m; ++i)
        cout << R[i] << '\n';
    return 0;
}