Pagini recente » Cod sursa (job #1408302) | Cod sursa (job #2528631) | Cod sursa (job #2276184) | Cod sursa (job #3159924) | Cod sursa (job #323977)
Cod sursa(job #323977)
#include<cstdio>
#include <vector>
using namespace std;
struct nod {
int gr;
vector<int> fii;
};
int p[20][250003];
int exp[19]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144};
int main()
{
int n,vf,i,j,m,k,ok;
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=0;i<=n;i++)
{
for (j=0;j<19;j++)
p[j][i]=0;
}
for (i=1;i<=n;i++)
{
scanf("%d",&j);
if (j>0)
p[0][i]=j;
}
ok=1;
for (j=1; j<19 && ok; j++)
{
ok=0;
for (i=1;i<=n;i++)
{
p[j][i]=p[j-1][p[j-1][i]]; // stramosul de ord 2^j a lui i este
// stramosul de ord 2^(j-1) al (stramosului de ord 2^(j-1) al lui i)
if (p[j][i]!=0)
ok=1;
}
}
while (m>0)
{
m--;
scanf("%d%d",&j,&i);
// stramosul de ord i al lui j
k=0;
while (i>0)
{
if (i%2==1)
j=p[k][j];
k++;
i=i/2;
}
printf("%d\n",j);
}
return 0;
}