Cod sursa(job #205974)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 3 septembrie 2008 19:17:43
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>

int M,N;
int s[250005][20];

FILE *fin=fopen("stramosi.in","r"),
    *fout=fopen("stramosi.out","w");
int rezolvare(int q,int p){

    int lg=0;
    while(p){
        if(p%2) q=s[q][lg];
        p/=2;
        ++lg;
    }

    return q;
}


int main(){

    fscanf(fin,"%d %d",&N,&M);

    for(int i=1;i<=N;i++)
        fscanf(fin,"%d",&s[i][0]);

    for(int j=1;j<=19;j++)
        for(int i=1;i<=N;i++)
            s[i][j]=s[s[i][j-1]][j-1];

/*
    for(int i=1;i<=N;i++){
        for(int j=0;j<=5;j++)
            fprintf(fout,"%d ",s[i][j]);
        fprintf(fout,"\n");
    }

*/

    for(int i=1;i<=M;i++){
        int q,p;
        fscanf(fin,"%d %d",&q,&p);

        int lg=0;
        while(p){
            if(p%2)
                q=s[q][lg];
            p/=2;
            ++lg;
        }
        fprintf(fout,"%d\n",q);

    }

    fclose(fin);
    fclose(fout);

    return 0;

}