Cod sursa(job #2137377)

Utilizator osiaccrCristian Osiac osiaccr Data 20 februarie 2018 19:19:42
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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], rad, T[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);
        T[y] = x;
    }

    for (int i = 1; i <= n; ++ i) {
        if (T[i] == 0) {
            rad = i;
            break;
        }
    }

    dfs (rad);

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

    return 0;
}