Pagini recente » Cod sursa (job #612544) | Cod sursa (job #379970) | Cod sursa (job #1729358) | Cod sursa (job #879428) | Cod sursa (job #4545)
Cod sursa(job #4545)
#include<stdio.h>
#include<stdlib.h>
#define Nm 250001
#define Mm 300001
int *g[Nm],d[Nm],*a[Nm],b[Nm],x[Mm],y[Mm],s[Nm],k[Nm];
void DF(int x)
{ int t,i;
s[t=1]=x;
for(i=0;i<b[x];i++) a[x][i]=0;
while(t)
{ x=s[t];
if(k[x]<d[x])
{ s[++t]=g[x][k[x]++];
for(x=s[t],i=0;i<b[x];i++)
if(a[x][i]<t) a[x][i]=s[t-a[x][i]];
else a[x][i]=0; }
else t--; } }
int main(void)
{ int i,j,n,m;
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<m;i++)
{ scanf("%d%d",x+i,y+i);
a[x[i]]=(int*)realloc(a[x[i]],(b[x[i]]+1)*sizeof(int));
a[x[i]][b[x[i]]]=y[i];
y[i]=b[x[i]]++; }
for(i=0;i<d[0];i++) DF(g[0][i]);
for(i=0;i<m;i++) printf("%d\n",a[x[i]][y[i]]);
return 0; }