Cod sursa(job #116595)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 19 decembrie 2007 00:18:23
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#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;
}