Cod sursa(job #986544)

Utilizator cbanu96Banu Cristian cbanu96 Data 19 august 2013 01:09:45
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <vector>
#include <stack>

#define FILEIN "cerere.in"
#define FILEOUT "cerere.out"

using namespace std;

const int NMAX = 100005;

int N;
int K[NMAX];
int G[NMAX];
vector<int> F[NMAX]; char P[NMAX];
int st[NMAX];
int top;

void dfs(int node) {
    top++;
    st[top] = node;
    if (K[node] != 0) {
        G[node] = G[st[top-K[node]]] + 1;
    }
    size_t i;
    for ( i = 0; i < F[node].size(); i++ ) {
        dfs(F[node][i]);
    }
    top--;
}

int main()
{
    top = 0;
    int i, x, y;
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "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);
        F[x].push_back(y);
        P[y] = 1;
    }

    for ( i = 1; i <= N; i++) {
        if (!P[i]) {
            dfs(i);
            break;
        }
    }

/*    for ( i = 1; i <= N; i++ ) {
        if (K[i] == 0) {
            dfs2(i, 0);
        }
    }*/

    for ( i = 1; i <= N; i++ ) {
        printf("%d ", G[i]);
    }
    printf("\n");


    return 0;
}