Cod sursa(job #3171882)

Utilizator alexgroparuObada Alex alexgroparu Data 19 noiembrie 2023 18:27:52
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

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

VI path, sol;
VVI arb;
VVP queries;

void DFS(int x)
{
    path.push_back(x);

    for(auto [k, i] : queries[x])
    {
        int len = path.size() - 1 - k;
        if(len > 0)
            sol[i] = path[len];
    }

    for(int y : arb[x])
        DFS(y);

    path.pop_back();
}

int main()
{
    int n, m;
    fin >> n >> m;

    sol = VI(m + 1);
    arb = VVI(n + 1);
    queries = VVP(n + 1);

    for(int i = 1, tata; i <= n; ++i)
    {
        fin >> tata;
        arb[tata].push_back(i);
    }
    
    for(int i = 1, x, k; i <= m; ++i)
    {
        fin >> x >> k;
        queries[x].emplace_back(k, i);
    }

    DFS(0);

    for(int i = 1; i <= m; ++i)
        fout << sol[i] << '\n';
    return 0;
}