Cod sursa(job #983239)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 11 august 2013 12:24:53
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
#include <vector>
using namespace std;

const int MAX_N = 100002;

ifstream f("cerere.in");
ofstream g("cerere.out");

int N, top;
int K[MAX_N], sol[MAX_N], st[MAX_N];
vector < int > v[MAX_N];

inline void DFS(int x) {
    st[++top] = x;
    if(K[x])
        sol[x] = sol[st[top-K[x]]] + 1;
    for(size_t i = 0; i < v[x].size(); ++i)
        DFS(v[x][i]);
    --top;
}

int main() {
    f >> N;
    for(int i = 1; i <= N; ++i)
        f >> K[i];
    for(int i = 1, x, y; i < N; ++i) {
        f >> x >> y;
        v[x].push_back(y);
    }

    DFS(1);

    for(int i = 1; i <= N; ++i)
        g << sol[i] << " ";
    g << "\n";

    f.close();
    g.close();

    return 0;
}