Cod sursa(job #1674913)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 4 aprilie 2016 22:36:11
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
using namespace std;

FILE *in, *out;

const int N_max = 250002;
const int Log = 18;

int A[Log][N_max]; /* A[i][j] == AL 2 ^ i STRAMOS AL LUI j */

int N, Q;

int solve(int node, int p)
{
    int i = 0;

    while(p != 0)
    {
        if(p % 2 == 1) node = A[i][node];

        p = p / 2;

        i++;
    }

    return node;
}

int main()
{
    in = fopen("stramosi.in", "r");
    out = fopen("stramosi.out", "w");

    int i, j, node, p;

    fscanf(in, "%d %d", &N, &Q);

    for(i = 1; i <= N; i++) fscanf(in, "%d", &A[0][i]);

    for(i = 1; (1 << i) <= N; i++)
        for(j = 1; j <= N; j++)
        /* RECURENTA */
            if(A[i - 1][j]) A[i][j] = A[i - 1][ A[i - 1][j] ];

    for(i = 1; i <= Q; i++)
    {
        fscanf(in, "%d %d", &node, &p);

        fprintf(out, "%d\n", solve(node, p));
    }

    return 0;
}