Cod sursa(job #1539789)

Utilizator tiby10Tibi P tiby10 Data 1 decembrie 2015 16:32:59
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<bits/stdc++.h>
using namespace std;
#define MAXN 250002
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m, parent[21][MAXN]; // stramosul 2^k (<=20) a lui node

// parent[k][node] = parent[k-1][parent[k-1][node]]
//      2^k                2^(k-1)

void process(){
    int i, j;
    for(i=1; i<=20; ++i)
        for(j=1; j<=n; ++j)
            parent[i][j]=parent[i-1][parent[i-1][j]];
}

int query(int node, int putere){
    int i;
    for(i=0; (1<<i)<=putere; ++i)
        if((putere>>i)&1)
            node=parent[i][node];
    return node;
}

int main ()
{
    int i;
    fin>>n>>m;
    for(i=1; i<=n; ++i)
        fin>>parent[0][i];
    process();
    while(m--){
        int a, b; fin>>a>>b; // al b-lea
        fout<<query(a, b)<<'\n';
    }
    return 0;
}