Cod sursa(job #2940969)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 16 noiembrie 2022 20:26:56
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>

using namespace std;

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

const int DIM = 250005;
const int MAX_EXP = 17;

int n, m;
int dp[DIM][20];

int ancestor(int node, int cnt) {
    for (int exp = 17; exp >= 0; exp--) {
        if ((1 << exp) <= cnt) {
            cnt -= (1 << exp);
            node = dp[node][exp];
        }
    }
    return node;
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        fin >> dp[i][0];

    for (int exp = 1; exp <= MAX_EXP; exp++)
        for (int i = 1; i <= n; i++)
            dp[i][exp] = dp[dp[i][exp - 1]][exp - 1];

    for (int i = 1; i <= m; i++) {
        int q, p;
        fin >> q >> p;
        fout << ancestor(q, p) << '\n';
    }

    fin.close();
    fout.close();
    return 0;
}