Cod sursa(job #2884640)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 4 aprilie 2022 14:45:20
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

#define maxV 250005

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

std::vector <int> parent[20];

int main() {

    int V, Q;
    fin >> V >> Q;
    for(int i = 0; i < 20; i ++)
        parent[i].resize(V + 1);

    for(int i = 1; i <= V; i ++) {
        fin >> parent[0][i];
    }

    for(int i = 1; i <= V; i ++) {
        for(int step = 1, p2 = 1; p2 < V; step ++, p2 <<= 1) {
            int prev1 = parent[step-1][i];
            int prev2 = parent[step-1][prev1];
            if(prev1 and prev2)
                parent[step][i] = prev2;
            else break;
        }
    }

    while(Q --) {
        int node, k;
        fin >> node >> k;
        for(; k and node; k -= k & (-k)) {
            int i = log2(k&(-k));
            node = parent[i][node];
        }

        fout << node << '\n';
    }

    return 0;
}