Pagini recente » Cod sursa (job #256178) | Cod sursa (job #838712) | Cod sursa (job #111970) | Cod sursa (job #2321740) | Cod sursa (job #4532)
Cod sursa(job #4532)
#include<stdio.h>
#include<stdlib.h>
#define Nm 250001
int a[18][Nm],*g[Nm],d[Nm],s[Nm],k[Nm];
void DF(int x)
{ int i,t;
s[t=1]=x;
while(t)
if(k[s[t]]<d[s[t]])
{ s[++t]=g[s[t-1]][k[s[t-1]]++];
for(i=0;1<<i<t;i++) a[i][s[t]]=s[t-(1<<i)]; }
else t--; }
int main(void)
{ int n,m,i,j,x,y;
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{ scanf("%d",&j);
g[j]=(int*)realloc(g[j],(d[j]+1)*sizeof(int));
g[j][d[j]++]=i; }
for(i=0;i<d[0];i++) DF(g[0][i]);
for(i=0;i<m;i++)
{ scanf("%d%d",&x,&y);
for(j=0;1<<j<=y;j++)
if(1<<j&y) x=a[j][x];
printf("%d\n",x); }
return 0; }