Cod sursa(job #159340)

Utilizator city_guy91alex isip city_guy91 Data 14 martie 2008 08:19:37
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>

int n, s[100001], r[100001], sol[100001], k, rad;

typedef struct nod
{
   int x;
   nod *a;
}  *pNod;
pNod v[100001];

void citire()
{
   freopen("cerere.in","r",stdin);
   freopen("cerere.out","w",stdout);

   int x, y, i;
   pNod p;
   scanf("%d",&n);
   for (i = 1; i <= n; i++) scanf("%d", &r[i]);
   for (i = 1; i < n; i++)
   {
      scanf("%d %d",&x,&y);
      p = new nod;
      p -> x = y;
      p -> a = v[x];
      v[x] = p;
      s[y]++;
   }
}

void DF(int nod)
{
   s[++k] = nod;
   if (!r[nod]) sol[nod] = 0;
   else sol[nod] = sol[s[k - r[nod]]] + 1;
   pNod p;
   for (p = v[nod]; p != NULL; p = p -> a)
   {
      DF(p->x);
      --k;
   }
}

int main()
{
   citire();
   int i;
   for (i = 1; i <= n; i++) if (!s[i]) {rad = i; break;}
   DF(rad);
   for (i = 1; i <= n; i++) printf("%d ",sol[i]);
   return 0;
}