Cod sursa(job #190424)

Utilizator katakunaCazacu Alexandru katakuna Data 22 mai 2008 15:07:26
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
struct cer {int poz,x; cer *adr;} *c[351000];
struct nod {int inf; nod *adr;} *v[251000];
int rez[250110],viz[250110],n,m,i,x,y,s[250011],t[250011];


void DF(int x,int niv){
viz[x]=1;
s[niv]=x;
nod *p;
cer *q;
p=v[x];
q=c[x];

  for(;q!=NULL;q=q->adr){
   if( niv-(q->x) <=0 )
   rez[q->poz]=0;

   else
   rez[q->poz]=s[ niv - (q->x) ];

  }
  

  for(;p!=NULL;p=p->adr){

    if(!viz[p->inf])
    DF(p->inf,niv+1);

  }

}


int main(){

FILE *f=fopen("stramosi.in","r");
fscanf(f,"%d %d",&n,&m);

  for(i=1;i<=n;i++){
  fscanf(f,"%d",&x);
  t[i]=x;
  nod *p=new nod;
  p->inf=i;
  p->adr=v[x];
  v[x]=p;
  }

  for(i=1;i<=m;i++){
  fscanf(f,"%d %d",&y,&x);
  cer *q=new cer;
  q->poz=i;
  q->x=x;
  q->adr=c[y];
  c[y]=q;
  }

fclose(f);

 for(i=1;i<=n;i++)
  if(!t[i])
  DF(i,1);

FILE *g=fopen("stramosi.out","w");
  for(i=1;i<=m;i++)
  fprintf(g,"%d\n",rez[i]);
  
fclose(g);

return 0;
}