Pagini recente » Cod sursa (job #32062) | Cod sursa (job #850013) | Cod sursa (job #879060) | Cod sursa (job #2087522) | Cod sursa (job #1987135)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 1e5 + 2;
int n, root, in[Nmax], k[Nmax], dp[Nmax];
vector<int>g[Nmax];
vector<int>st;
void DFS(int node) {
st.push_back(node);
if(!k[node]) dp[node] = 0;
else
dp[node] = dp[st[st.size() - 1 - k[node]]] + 1;
for (auto i : g[node]) {
DFS(i);
}
st.pop_back();
}
int main() {
ifstream cin("cerere.in");
ofstream cout("cerere.out");
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;
g[a].push_back(b);
++in[b];
}
for (int i = 1; i <= n; ++i)
if (!in[i]) root = i;
DFS(root);
for (int i = 1; i <= n; ++i) {
cout << dp[i] << ' ';
}
return 0;
}