Pagini recente » Cod sursa (job #400002) | Cod sursa (job #653504) | Cod sursa (job #1779162) | Cod sursa (job #1593423) | Cod sursa (job #584500)
Cod sursa(job #584500)
#include<stdio.h>
#include<stdlib.h>
#define dim 250005
using namespace std;
int *A[dim],n,m,i,x,v[dim*2],nr,F[2*dim],Q,P,pp;
char degr[dim];
void dfs(int x)
{int i;
v[++nr]=x;
F[x]=nr;
for(i=1;i<=A[x][0];i++)
{
dfs(A[x][i]);
if(i+1<=A[x][0])
v[++nr]=x;
}
v[++nr]=x;
}
int main()
{
FILE *f=fopen("stramosi.in","r"), *g=fopen("stramosi.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{
A[i]=(int*) realloc(A[i],sizeof(int));
A[i][0]=0;
}
for(i=1;i<=n;i++)
{
fscanf(f,"%d ",&x);
if(x!=0)
{ A[x][0]++;
A[x]=(int*) realloc(A[x],(A[x][0]+1) * sizeof(int));
A[x][A[x][0]]=i;
degr[i]++;
}
}
for(i=1;i<=n;i++)
if(degr[i]==0)
dfs(i);
int ok=1;
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&Q,&P);
pp=F[Q];
while(ok)
{
if(P==0)
{fprintf(g,"%d\n",v[pp]); break;}
if(!degr[v[pp]])
{fprintf(g,"0\n"); break;}
else pp=F[v[--pp]];
P--;
}
}
fclose(f);
fclose(g);
return 0;
}