Cod sursa(job #780527)

Utilizator visanrVisan Radu visanr Data 20 august 2012 18:06:21
Problema Cerere Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;

#define nmax 100010

int sol[nmax], used[nmax], K[nmax], stack[nmax], A, B, N;
vector<int> G[nmax];


void DFS(int node, int pos)
{
     if(K[node] == 0) sol[node] = 0;
     else sol[node] = 1 + sol[ stack[pos - K[node]] ];
     stack[pos] = node;
     for(vector<int> :: iterator it = G[node].begin(); it != G[node].end(); ++it)
                     DFS(*it, pos + 1);
}

int main()
{
    freopen("cerere.in", "r", stdin);
    freopen("cerere.out", "w", stdout);
    int i;
    scanf("%i", &N);
    for(i = 1; i <= N; i++) scanf("%i", &K[i]);
    int Q = N * (N + 1) / 2;
    for(i = 1; i < N; i++)
    {
          scanf("%i %i", &A, &B);
          G[A].push_back(B);
          Q -= B;
    }
    DFS(Q, 1);
    for(i = 1; i <= N; i++) printf("%i ", sol[i]);
    return 0;
}