Cod sursa(job #2137368)

Utilizator osiaccrCristian Osiac osiaccr Data 20 februarie 2018 19:13:59
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
#include <vector>
#define DEF 100010

using namespace std;

ifstream fin ("cerere.in");
ofstream fout ("cerere.out");

int n, K[DEF], S[DEF], top, G[DEF];

vector < int > L[DEF];

void dfs (int nod) {
    if (K[nod] != 0) {
        G[nod] = 1 + G[S[top - K[nod] + 1]];
    }

    S[++ top] = nod;

    for (int i = 0; i < L[nod].size (); ++ i) {
        dfs (L[nod][i]);
    }

    S[top --] = nod;
}

int main () {
    fin >> n;
    for (int i = 1; i <= n; ++ i) {
        fin >> K[i];
    }
    for (int i = 1; i <= n; ++ i) {
        int x, y;
        fin >> x >> y;
        L[x].push_back (y);
    }

    dfs (1);

    for (int i = 1; i <= n; ++ i) {
        fout << G[i] << " ";
    }

    return 0;
}