Cod sursa(job #3172780)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 21 noiembrie 2023 11:02:17
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream f("intrare.in");
ofstream g("iesire.out");
const int nmax = 250005;
int Log[21];
int dp[nmax][25], father[nmax];
int n, m;




int main(){
    f >> n >> m;
    for(int i = 1; i <= n; i++){
        f >> father[i];
    }

    //precalculam

    for(int i = 1; i <= n; i++){
        dp[i][0] = father[i];
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= 20; j++){
            dp[i][j] = dp[dp[i][j - 1]][j - 1];
        }
    }

    Log[1] = 0;
    for(int i = 2; i <= 20; i++){
        Log[i] = Log[i / 2] + 1;
    }

    //raspundem

    while(m--){
        int node, p;
        f >> node >> p;
        while(p > 0){
           node = dp[node][Log[p]];
            p -= Log[p];
        }
        g << node << '\n';
    }
}