Pagini recente » Cod sursa (job #1266581) | Cod sursa (job #476385) | Cod sursa (job #1744411) | Cod sursa (job #1093296) | Cod sursa (job #4654)
Cod sursa(job #4654)
#include <fstream.h>
void df(unsigned);
unsigned cauta(unsigned, unsigned);
unsigned N,M,i,S[22][205],STR[2505],Q,P,pt,j;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int main()
{
fin>>N>>M;
for (i=1;i<=N;i++)
fin>>S[0][i];
for (i=1;i<=N;i++)
if (STR[i]==0)
{
STR[i]=1;
df(i);
}
for (i=1;i<=M;i++)
{
fin>>P>>Q; // al Q-lea stramos al lui P
fout<<cauta(P,Q)<<'\n';
}
fout.close();
return 0;
}
void df(unsigned maimuta)
{
int i;
if (S[0][maimuta]==0)
return;
if (!STR[S[maimuta][0]])
{
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]];
}
unsigned cauta(unsigned p, unsigned q)
{
while (q && p)
{
for (j=0,pt=1;pt<q;pt<<=1,j++);
if (pt>q) { j--; pt>>=1; }
p=S[j][p]; q-=pt;
}
return p;
}