Cod sursa(job #1375352)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 5 martie 2015 13:02:24
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
const int N=250000;
int stram[N+1][21];
int dad[N+1];
int n,q;
void set_stram(){
    for(int i=1;i<=n;i++)
        stram[i][0]=dad[i];
    for(int j=1;1<<j<=n;j++)
        for(int i=1;i<=n;i++)
            stram[i][j]=stram[stram[i][j-1]][j-1];
}
int query(int node,int dist){
    int p=1<<20;
    int j=20;
    while(p){
        if(p<=dist){
            node=stram[node][j];
            dist-=p;
        }
        p/=2;
        j--;
    }
    return node;
}
int main(){
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++)
        scanf("%d",&dad[i]);
    set_stram();
    while(q){
        q--;
        int x,y;
        scanf("%d%d",&x,&y);
        printf("%d\n",query(x,y));
    }
    return 0;
}