Cod sursa(job #138146)

Utilizator marinMari n marin Data 17 februarie 2008 22:03:19
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#define DIM 100001


struct nod {
  int v;
  nod *urm;
};


int k[DIM];
int t[DIM];
int n,i,r,x,y;
int s[DIM];
int rez[DIM];
nod *p[DIM],*q;


void parc(int x, int niv){
  nod *q;
  s[niv]=x;
  if (k[x]==0) {
    rez[x]=0;
  } else {
    rez[x]=rez[s[niv-k[x]]]+1;
  }
  q=p[x];
  while (q!=NULL) {
//    if ()
    parc(q->v, niv+1);
    q=q->urm;
  }
}


int main(){
  FILE *f = fopen("cerere.in","r");
  fscanf(f,"%d",&n);
  for (i=1;i<=n;i++)
    p[i]=NULL;
  for (i=1;i<=n;i++)
    fscanf(f,"%d",&k[i]);
  for (i=1;i<n;i++){
    fscanf(f,"%d %d",&x,&y);
    t[y]=x;
    q=new nod;
    q->v=y;
    q->urm=p[x];
    p[x]=q;
  }
  fclose(f);

  for (i=1;i<=n;i++)
    if (t[i]==0) {
      r=i;
      break;
    }
/*  for (i=1;i<=n;i++)
    t[i]==0;*/

  parc(r,1);

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

  return 0;
}