Pagini recente » Cod sursa (job #2529530) | Cod sursa (job #2964378) | Cod sursa (job #1597534) | Cod sursa (job #2903634) | Cod sursa (job #1068857)
#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] << " ";
}