Cod sursa(job #2933384)

Utilizator christalknightChristian Micea christalknight Data 5 noiembrie 2022 10:06:36
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

vector <int> matrix[100];

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

void citire(void);
void afis(void);
void dfs(int poz);
void precalc(void);

int n, m, q, p, TT[250002], A[100][100], log[100];                                   //TT = vectorul de tati

int main()
{
    fin>>n>>m;
    citire();
    precalc();
    while(m--){
        fin>>q>>p;
        while(p){
            int k = log[p];
            q = A[k][q];                    //a[k][q] == stramosul de grad 2 la puterea k a lui q
            p -= (1<<k);
            }
        fout<<q<<"\n";
        }
}

void citire(void){
    int i, n2;
    n2 = n;
    while(n2--){
        fin>>i;
        TT[n - n2] = i;
        }
    }

void precalc(void){
    for(int i = 2; i <= n; i++)
        log[i] = log[i / 2] + 1;                    //partea intreaga a log in baza 2 din i sau cea mai mare put a lui 2 <= i
    for(int i = 1; i <= n; i++)
        A[0][i] = TT[i];
    for(int i = 1; (1<<i) <= n; i++)                //1<<i = 2 la puterea i
        for(int j = 1; j <= n; j++)
            A[i][j] = A[i - 1][A[i - 1][j]];
    }