Cod sursa(job #1068857)

Utilizator tudorv96Tudor Varan tudorv96 Data 28 decembrie 2013 21:04:45
Problema Cerere Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
using namespace std;

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

const int N = 1e5+5;

int n, t[N], s[N], d[N], c[N], k, gr[N];

void dfs(int x) {
    s[++k] = x;
    int poz = k;
    if (t[x])
        dfs (t[x]);
    if (c[x])
        d[x] += d[s[poz + c[x]]];
    else
        c[x] = 1;
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> c[i];
        if (c[i])
            d[i]++;
    }
    for (int i = 1; i < n; ++i) {
        int x, y;
        fin >> x >> y;
        t[y] = x;
        gr[x]++;
    }
    for (int i = 1; i <= n; ++i) {
        k = 0;
        if (!gr[i] && c[i])
            dfs(i);
    }
    for (int i = 1; i <= n; ++i)
        fout << d[i] << " ";
}