Cod sursa(job #190011)

Utilizator katakunaCazacu Alexandru katakuna Data 19 mai 2008 17:48:22
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>

struct nod {int inf; nod *adr;} *a[101000];
int viz[101000],s[111000],cost[111000],i,j,rad,n,x,y,v[101000],r[101000];

void DF(int x,int niv){
nod *p;
viz[x]=1;
s[niv]=x;
p=a[x];

  if(v[x]==0) cost[x]=0;
  else cost[x]=cost[s[niv-v[x]]]+1;

  for(;p!=NULL;p=p->adr){
    if(!viz[p->inf])
    DF(p->inf,niv+1);
  }

}


int main(){

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

  for(i=1;i<=n;i++)
  fscanf(f,"%d",&v[i]);

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

fclose(f);

  for(i=1;i<=n;i++)
    if(!r[i]){
    rad=i;
    break;
    }

DF(rad,1);

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

return 0;
}