Cod sursa(job #608600)

Utilizator VmanDuta Vlad Vman Data 17 august 2011 14:19:35
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <vector>
using namespace std;

#define Nmax 100001

int N, A, B, W[Nmax], i, P[Nmax], L[Nmax], K[Nmax];
vector<int> G[Nmax];

void df(int nod, int lvl)
{
     vector<int> :: iterator it;

     L[lvl] = nod;     
     P[nod] = K[nod] == 0 ? 0 : P[ L[lvl-K[nod]] ] + 1;
     
     for (it=G[nod].begin(); it<G[nod].end(); ++it)
         df(*it, lvl+1);
}

int main()
{
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    
    scanf("%d", &N);
    for (i=1; i<=N; ++i)
        scanf("%d", &K[i]);
    for (i=1; i<N; ++i)
        {
              scanf("%d %d", &A, &B);
              G[A].push_back(B);
              W[B] = 1;
        }
    
    for (i=1; i<=N; ++i)
        if (!W[i]) { df(i, 0); break; }
        
    for (i=1; i<=N; ++i)
        printf("%d ", P[i]);
    printf("\n");
    
    return 0;
}