Cod sursa(job #3172792)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 21 noiembrie 2023 11:16:30
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

const int nmax = 250005;
int Log[nmax];
int dp[nmax][25], father[nmax];
int n, m;




int main(){
    ifstream f("stramosi.in");
    ofstream g("stramosi.out");
    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 <= nmax; 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 -= (1 << Log[p]);
        }
        g << node << '\n';
    }
}