Pagini recente » Cod sursa (job #1657512) | Cod sursa (job #1766590) | Cod sursa (job #1383795) | Cod sursa (job #2145177) | Cod sursa (job #1053435)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
const int NMAX = 100002, logMax = 18;
int N, K[NMAX];
int C[NMAX];
vector<int> G[NMAX];
int st[NMAX], numV[NMAX];
int main()
{
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> K[i];
}
int root = 0;
for (int i = 1; i < N; i++) {
int A, B;
cin >> A >> B;
G[A].push_back(B);
root ^= B;
root ^= i;
}
root ^= N;
st[++st[0]] = root;
while (st[0] > 0) {
int v = st[st[0]];
if (numV[v] == (int)G[v].size()) {
st[0]--;
}
else {
int w = G[v][numV[v]++];
st[++st[0]] = w;
if (K[w] > 0) {
C[w] = C[st[st[0] - K[w]]] + 1;
}
}
}
for (int i = 1; i <= N; i++) {
cout << C[i] << " ";
}
return 0;
}