Cod sursa(job #1127164)

Utilizator Theorytheo .c Theory Data 27 februarie 2014 11:25:39
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

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

const int NMAX = 100009;

int N; int T[NMAX]; int K[NMAX]; bool fath[NMAX];

vector<int> G[NMAX];

int S[NMAX];int answ[NMAX];


void dfs(int nod) {

    fath[nod] = true;
    S[++S[0]] = nod;

    if(K[nod]) answ[nod] = 1 + answ[S[S[0] - K[nod]]];

    for(unsigned i = 0 ;i < G[nod].size(); ++i)
        if(fath[G[nod][i]] == false)
            dfs(G[nod][i]);

    S[--S[0]];
}

int main() {

    fin >> N;
    for(int i = 1; i <= N; ++i)
        fin >> K[i];
    for(int i = 1; i < N; ++i) {
        int a, b; fin >> a >> b;
        G[a].push_back(b);
        fath[b] = true;
    }

    for(int i = 1; i <= N; ++i)
        if(fath[i] == false) G[0].push_back(i);
    memset(fath, false, sizeof(fath));

    dfs(0);

    for(int i = 1; i <= N; ++i)
        fout << answ[i] << " ";
    return 0;
}