Cod sursa(job #4657)

Utilizator vmaneavmanea vmanea Data 6 ianuarie 2007 00:21:05
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

void df(unsigned);

unsigned N,M,i,S[22][250005],STR[250005],q,p,pt,j;

int main(void)

{

 freopen("stramosi.in", "r", stdin);

 freopen("stramosi.out", "w", stdout);

 scanf("%u %u", &N, &M);

 for (i=1;i<=N;i++)

  scanf("%u", &S[0][i]);

 for (i=1;i<=N;i++)

  if (STR[i]==0)

  {

   STR[i]=1;

   df(i);

  }

 for (i=1;i<=M;i++)

 {

  scanf("%u %u", &p, &q);

  while (q && p)

 {

  for (j=0,pt=1;pt<q/2;pt<<=1,j++);

  p=S[j][p]; q-=pt;

 }




  printf("%u\n", p);

 }

 return 0;

}

void df(unsigned maimuta)

{

 int i;

 if (S[0][maimuta]==0)

  return;

 if (!STR[S[0][maimuta]])

 {

  STR[S[0][maimuta]]=1;

  df(S[0][maimuta]);

 }

 for (i=1;S[i-1][S[i-1][maimuta]];i++)

  S[i][maimuta]=S[i-1][S[i-1][maimuta]];

}