Pagini recente » Cod sursa (job #2868771) | Cod sursa (job #2777953) | Cod sursa (job #2148406) | Cod sursa (job #3139996) | Cod sursa (job #2955343)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int DIM = 100010;
int n, x, y, root;
int k[DIM], father[DIM], sol[DIM], l[DIM];
vector<int> v[DIM];
void dfs(int node, int lvl) {
l[lvl] = node;
if (k[node] == 0)
sol[node] = 0;
else
sol[node] = sol[l[lvl - k[node]]] + 1;
for (int i = 0; i < v[node].size(); i++)
dfs(v[node][i], lvl + 1);
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++)
fin >> k[i];
for (int i = 1; i < n; i++) {
fin >> x >> y;
v[x].push_back(y);
father[y] = x;
}
for (int i = 1; i <= n; i++) {
if (father[i] == 0) {
root = i;
break;
}
}
dfs(root, 1);
for (int i = 1; i <= n; i++)
fout << sol[i] << ' ';
return 0;
}