Pagini recente » Cod sursa (job #3274854) | Cod sursa (job #2963272) | Cod sursa (job #2860275) | Cod sursa (job #2204919) | Cod sursa (job #3175273)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int maxn = 1e5;
int k[maxn];
vector<int> down[maxn];
int ans[maxn];
void dfs(int curr, vector<int> &strap) {
if (k[curr] == 0)
ans[curr] = 0;
else
ans[curr] = ans[strap[strap.size() - k[curr]]] + 1;
strap.push_back(curr);
for (int child: down[curr])
dfs(child, strap);
strap.resize(strap.size() - 1);
}
int main() {
int n;
fin >> n;
for (int i = 0; i < n; i++)
fin >> k[i];
for (int i = 0; i < n - 1; i++) {
int a, b;
fin >> a >> b;
a--;
b--;
down[a].push_back(b);
}
vector<int> aa;
dfs(0, aa);
for (int i = 0; i < n; i++)
fout << ans[i] << ' ';
return 0;
}