Cod sursa(job #863889)

Utilizator Coman95coman cosmin Coman95 Data 24 ianuarie 2013 12:05:04
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <vector>
using namespace std;

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

int n, m;
int g[18][250001];

void Query( int nod, int d );

int main()
{
    int x, y;
    fin >> n >> m;
    for( int i = 1; i <= n; ++i )
        fin >> g[0][i];
    for( int i = 1; i <= 17; ++i )
        for( int j = 1; j <= n; ++j )
            g[i][j] = g[i-1][g[i-1][j]];
    for( int i = 1; i <= m; ++i )
    {
        fin >> x >> y;
        Query( x, y );
    }
    fin.close();
    fout.close();
    return 0;
}

void Query( int nod, int d )
{
    if( d == 0 )
    {
        fout << nod << '\n';
        return;
    }
    int log = 0;
    int i = 1;
    while( i*2 <= d )
    {
        i *= 2;
        log++;
    }
    Query( g[log][nod], d - i );
}