Cod sursa(job #989049)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 24 august 2013 18:34:13
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <string.h>
#include <vector>
#define NMAX 100100

using namespace std;

int Q[NMAX], sol[NMAX], st[NMAX];
bool used[NMAX];
vector <int> G[NMAX];

void DF (int node, int K)
{
    vector <int> :: iterator it;

    st[++ K] = node;
    if (Q[node])
        sol[node] = sol[st[K - Q[node]]] + 1;

    for (it = G[node].begin (); it != G[node].end (); it ++)
        DF (*it, K);
}

int main ()
{
    int N, i, x, y;

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

    scanf ("%d", &N);
    for (i = 1; i <= N; i ++)
        scanf ("%d", &Q[i]);
    for (i = 1; i < N; i ++)
    {
        scanf ("%d%d", &x, &y);
        G[x].push_back (y);
        used[y] = 1;
    }

    for (i = 1; i <= N; i ++)
        if (!used[i])
            break;
    DF (i, 0);

    for (i = 1; i <= N; i ++)
        printf ("%d ", sol[i]);
    return 0;
}