Cod sursa(job #609944)

Utilizator SpiderManSimoiu Robert SpiderMan Data 23 august 2011 22:11:41
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
# include <cstdio>
# include <vector>
using namespace std;

const char *FIN = "cerere.in", *FOU = "cerere.out";
const int MAX = 100005;

int N, K[MAX], S[MAX], stiva[MAX], T[MAX];
vector <int> G[MAX];

void dfs (int nod, int lev) {
    stiva[lev] = nod;
    S[nod] = K[nod] ? S[stiva[lev - K[nod]]] + 1 : 0;
    for (vector <int> :: iterator it = G[nod].begin (); it != G[nod].end (); ++it)
        dfs (*it, lev + 1);
}

int main (void) {
    freopen (FIN, "r", stdin);
    freopen (FOU, "w", stdout);

    scanf ("%d", &N);
    for (int i = 1; i <= N; ++i)
        scanf ("%d", K + i);
    for (int i = 1, x, y; i < N; ++i) {
        scanf ("%d %d", &x, &y);
        G[x].push_back (y), T[y] = 1;
    }
    for (int i = N; i; --i) {
        if (T[i]) continue;
        dfs (i, 1); break ;
    }
    for (int i = 1; i <= N; ++i)
        printf ("%d ", S[i]);
}