Pagini recente » Cod sursa (job #54565) | Cod sursa (job #1424884) | Cod sursa (job #3160373) | de-revenire | Cod sursa (job #116595)
Cod sursa(job #116595)
#include <stdio.h>
#include <string.h>
#define N 300005
#define M 350005
long c[N],pc[N],varf=1;
long d[4][M],pd[N],v2=1;
long coada[N],vc=0;
void df(long k)
{for (long j=pc[k];j!=0;j=c[j])
{for (long i=pd[j];d[0][i]!=0;i=d[3][i])
{d[2][i]=coada[vc-d[1][i]];}
if(pc[j]!=0)
{coada[vc++]=j;
df(j);
vc--;
}
}
}
int main ()
{FILE *f,*ff;
long n,m,x,y,i;
memset(c,0,sizeof(c));
memset(pc,0,sizeof(pc));
memset(d,0,sizeof(d));
memset(pd,0,sizeof(pd));
f=fopen("stramosi.in","r");
ff=fopen("stramosi.out","w");
fscanf(f,"%ld%ld",&n,&m);
for (i=1;i<=n;i++)
{fscanf(f,"%ld",&x);
c[i]=pc[x];
pc[x]=i;
}
varf=i;
for (i=1;i<=m;i++)
{fscanf(f,"%ld%ld",&x,&y);
d[0][i]=x;
d[1][i]=y;
d[3][i]=pd[x];
pd[x]=i;
}
v2=i;
coada[vc++]=0;
df(0);
for (i=1;i<=m;i++)
{fprintf(ff,"%ld\n",d[2][i]);}
fclose(f);
fclose(ff);
return 0;
}