Pagini recente » Cod sursa (job #2408847) | Cod sursa (job #1574073) | Cod sursa (job #1622212) | Cod sursa (job #1126921) | Cod sursa (job #2777474)
#include <fstream>
#include <vector>
using namespace std;
const int N = 1e5 + 5;
vector<int> fii[N];
int k[N], st[N], dp[N];
bool nu_rad[N];
void dfs(int nod, int niv) {
st[niv] = nod;
if (k[nod])
dp[nod] = 1 + dp[st[niv - k[nod]]];
for (auto vec : fii[nod])
dfs(vec, niv + 1);
}
int main() {
ifstream cin("cerere.in");
ofstream cout("cerere.out");
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> k[i];
for (int i = 0; i < n - 1; ++i) {
int x, y;
cin >> x >> y;
fii[x].push_back(y);
nu_rad[y] = true;
}
cin.close();
int rad;
for (int i = 1; i <= n; ++i)
if (!nu_rad[i]) {
rad = i;
break;
}
dfs(rad, 0);
for (int i = 1; i <= n; ++i)
cout << dp[i] << " ";
cout.close();
return 0;
}