Cod sursa(job #2810438)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 29 noiembrie 2021 14:36:22
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int maxN = 255005, maxLg = 20;
int n, nq;
int s[maxN][maxLg + 5], depth[maxN];
vector <int> G[maxN];

void dfs(int nod, int d)
{
    depth[nod] = d;
    for(int i = 1; i <= maxLg; i++)
        s[nod][i] = s[s[nod][i - 1]][i - 1];
    for(auto it : G[nod])
        dfs(it, d + 1);
}

int main()
{
    fin >> n >> nq;
    for(int i = 1; i <= n; i++)
    {
        fin >> s[i][0];
        G[s[i][0]].push_back(i);
    }
    dfs(0, 0);
    for(int i = 1; i <= nq; i++)
    {
        int nod, nr, pow = 1;
        fin >> nod >> nr;
        for(int j = maxLg; j >= 0; j--)
            if(nr & (1 << j))
                nod = s[nod][j];
        fout << nod << '\n';
    }
    return 0;
}