Cod sursa(job #2135513)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 18 februarie 2018 21:53:31
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int nmax = 100005;
int n, i, j, stm[nmax], x, y, cnt[nmax], stv[nmax], vf;
vector<int> ls[nmax];

void dfs(int x) {
    stv[++vf] = x;
    if (stm[x]) cnt[x] += cnt[stv[vf-stm[x]]] + 1;
    for (auto y : ls[x])
        dfs(y);
    vf--;
}

int main() {
    f >> n;
    for (i = 1; i <= n; i++)
        f >> stm[i];
    for (i = 1; i < n; i++) {
        f >> x >> y;
        ls[x].push_back(y);
    }
    dfs(1);
    for (i = 1; i <= n; i++) g << cnt[i] << ' ';
    return 0;
}