Pagini recente » Cod sursa (job #2227319) | Cod sursa (job #1568000) | Cod sursa (job #1278074) | Cod sursa (job #1919020) | Cod sursa (job #2649604)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100005
int n,k[NMAX],ans[NMAX], IN[NMAX];
vector<int> v[NMAX], st;
void dfs(int nod){
if (k[nod] == 0) ans[nod] = 0;
else ans[nod] = ans[st[max(0, (int)st.size() - k[nod])]] + 1;
st.push_back(nod);
for (auto it : v[nod]){
dfs(it);
}
st.pop_back();
}
int main()
{
cin.sync_with_stdio(false);
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
cin >> n;
for (int i=1;i<=n;i++) cin >> k[i];
for (int i=1;i<n;i++){
int a,b;
cin >> a >> b;
v[a].push_back(b);
IN[b]++;
}
int rad = 0;
for (int i=1;i<n;i++) if (IN[i] == 0) rad = i;
dfs(rad);
for (int i=1;i<=n;i++) cout << ans[i] << ' ';
cout << '\n';
return 0;
}