Cod sursa(job #1326764)

Utilizator MacWonkMihai Alexandru Cosmin MacWonk Data 25 ianuarie 2015 22:36:52
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <cstring>
#include <cmath>
#define fin "stramosi.in"
#define fout "stramosi.out"
#define Nmax 250001
#define logNmax 20
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int a[logNmax][Nmax],N,M,b2[1001],r;
FILE *fi,*fo;
int ancestor(int x)
{
    int i,u;
    for(i=r;i>0;i--)
        if(b2[i])
            u=a[i-1][x], x=u;
    return u;
}
int ancestor(int q,int p){
    int x=q,r,j=0;
    while(p){
        r=p&1;
        if(r)
            x=a[j][x];
        j++;
        p>>=1;
    }
    return x;
}

void solve()
{
    int i,j,k,logN;
    f>>N>>M;
    for(i=1;i<=N;i++) f>>a[0][i];
    logN=ceil(log(N)/log(2));
    for(k=1;k<=logN;k++)
        for(i=1;i<=N;i++)
    a[k][i]=a[k-1][a[k-1][i]];
    for(;M;M--)
    {
        //memset(b2,0,sizeof(b2));
        f>>i>>j;
        //for(r=0;j;j/=2) b2[++r]=j%2;
        k=ancestor(i,j), g<<k<<'\n';
    }

}
int main()
{
    solve();
    return 0;
}