Pagini recente » Cod sursa (job #298936) | Cod sursa (job #1828757) | Cod sursa (job #2837714) | Cod sursa (job #191290) | Cod sursa (job #2135008)
#include <fstream>
#include <vector>
#define MAXN 100005
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> graph[MAXN];
int N, k[MAXN], g[MAXN], stiva[MAXN], nn, nr[MAXN];
inline void Read() {
int x, y;
fin >> N;
for (int i = 1; i <= N; i++)
fin >> k[i];
for (int i = 1; i < N; i++) {
fin >> x >> y;
graph[x].push_back(y);
g[y] = 1;
}
}
inline int Calc(int num) {
if (k[stiva[num]] == 0)
return 0;
return 1 + Calc(num - k[stiva[num]]);
}
inline void DFS() {
int node = stiva[nn];
nr[node] = Calc(nn);
for (auto x : graph[node]) {
stiva[++nn] = x;
DFS();
}
nn--;
}
inline void Solve() {
for (int i = 1; i <= N; i++) {
if (!g[i]) {
stiva[++nn] = i;
DFS();
break;
}
}
for (int i = 1; i <= N; i++)
fout << nr[i] << " ";
}
int main () {
Read();
Solve();
fin.close(); fout.close(); return 0;
}