Cod sursa(job #2691136)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 27 decembrie 2020 13:14:56
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

const int NMAX = 250000;
const int MMAX = 300000;

int N, Q;
vector <int > g[NMAX + 5];
vector <pair<int,int> > queries[NMAX + 5];

int ans[MMAX + 5];

int vf, st[NMAX + 5];

void dfs(int node)
{
    st[++vf] = node;

    for(auto it : queries[node])
    {
        if(vf - it.first <= 0) ans[it.second] = 0;
        else ans[it.second] = st[vf - it.first];
    }

    for(auto it : g[node])
    {
        dfs(it);
    }

    vf--;
}

int main()
{
    cin >> N >> Q;

    for(int i = 1; i <= N; i++)
    {
        int dad;
        cin >> dad;
        g[dad].push_back(i);
    }

    for(int i = 1; i <= Q; i++)
    {
        int vertex, anc;
        cin >> vertex >> anc;
        queries[vertex].push_back({anc, i});
    }

    dfs(0);

    for(int i = 1; i <= Q; i++)
        cout << ans[i] << '\n';

    return 0;
}