Cod sursa(job #2973425)

Utilizator StefanL2005Stefan Leustean StefanL2005 Data 31 ianuarie 2023 22:20:06
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");


int Stramos(int Q, int P, vector<int> &V)
{
    if (P == 0)
        return Q;
    if (V[Q] == -1)
        return -1;

    return Stramos(V[Q], P - 1, V);
}

int Stra_Rad(int Q, int P, vector<int> &V, vector<int> &StraV, int sqr)
{
    while (P - sqr >= 0 && Q != -1)
    {
        Q = StraV[Q];
        P -= sqr;
    }

    if (P == 0)
        return Q;
    if (Q == -1)
        return -1;

    return Stramos(Q, P, V);
}
int main()
{
    int n, m;
    in>> n >> m;

    vector<int> V(n), StraV(n);
    for (int i = 0; i < n; i++)
    {
        in>> V[i];
        V[i]--;
    }

    int sqr = sqrt(n);
    for (int i = 0; i < n; i++)
        StraV[i] = Stramos(i, sqr, V);

    for (int t = 0; t < m; t++)
    {
        int Q, P;
        in>> Q >> P; Q--;

        out<< Stra_Rad(Q, P, V, StraV, sqr) + 1 << "\n";
    }
    return 0;
}