Cod sursa(job #991594)

Utilizator gbi250Gabriela Moldovan gbi250 Data 30 august 2013 22:55:48
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <vector>
#define SIZE 100001

using namespace std;

vector <int> v[SIZE];

int n, i, x, y, top, k[SIZE], g[SIZE], gr[SIZE], st[SIZE];

void DFS(int node)
{
    st[++top]=node;
    if(k[node])
        g[node]=g[ st[top - k[node]] ] +1;
    for(vector <int> :: iterator it=v[node].begin(); it!=v[node].end(); ++it)
        DFS(*it);
    --top;
}

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", &x, &y);
        v[x].push_back(y);
        ++gr[y];
    }
    for(i=1; gr[i]; ++i);
    DFS(i);
    for(i=1; i<=n; ++i)
        printf("%d ", g[i]);
    printf("\n");
    return 0;
}