Pagini recente » Cod sursa (job #1526917) | Cod sursa (job #1097833) | Cod sursa (job #217653) | Cod sursa (job #1638256) | Cod sursa (job #1678383)
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
using namespace std;
const string name = "cerere",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
const int MAX = 1e5 + 5;
vector<int> tree[MAX];
int val[MAX], str[MAX], rez[MAX], in[MAX];
int n;
void dfs(int node, int level) {
for (auto child : tree[node]) {
str[level] = child;
rez[child] = rez[str[level - val[child]]] + (val[child] == 0 ? 0 : 1);
dfs(child, level + 1);
}
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++)
fin >> val[i];
for (int a, b, i = 1; i <= n - 1; i++) {
fin >> a >> b;
tree[a].pb(b);
in[b]++;
}
int root = -1;
for (int i = 1; i <= n; i++)
if (!in[i]) {
root = i;
break;
}
str[0] = root;
rez[root] = 0;
dfs(root, 1);
for (int i = 1; i <= n; i++)
fout << rez[i] << ' ';
return 0;
}