Pagini recente » Cod sursa (job #1535208) | Cod sursa (job #926769) | Cod sursa (job #1473754) | Cod sursa (job #1425770) | Cod sursa (job #2316135)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+1;
ifstream in("cerere.in");
ofstream out("cerere.out");
int val[N],rez[N],lvl[N],st[N];
bool a[N];
vector<int> v[N];
void dfs(int x)
{
for (auto it: v[x])
if (!lvl[it])
{
lvl[it] = lvl[x]+1;
st[lvl[it]] = it;
if (val[it])
rez[it] = rez[st[lvl[it]-val[it]]]+1;
dfs(it);
}
}
int main()
{
int n;
in >> n;
for (int i = 1; i<=n; i++)
in >> val[i];
for (int i = 1; i<n; i++)
{
int x,y;
in >> x >> y;
v[x].push_back(y);
a[y] = 1;
}
int root = 0;
for (int i = 1; i<=n; i++)
if (!a[i])
root = i;
st[1] = root;
dfs(root);
for (int i = 1; i<=n; i++)
out << rez[i] << " ";
}