Pagini recente » Cod sursa (job #1635534) | Cod sursa (job #27852) | Cod sursa (job #1822684) | Cod sursa (job #232461) | Cod sursa (job #983239)
Cod sursa(job #983239)
#include <fstream>
#include <vector>
using namespace std;
const int MAX_N = 100002;
ifstream f("cerere.in");
ofstream g("cerere.out");
int N, top;
int K[MAX_N], sol[MAX_N], st[MAX_N];
vector < int > v[MAX_N];
inline void DFS(int x) {
st[++top] = x;
if(K[x])
sol[x] = sol[st[top-K[x]]] + 1;
for(size_t i = 0; i < v[x].size(); ++i)
DFS(v[x][i]);
--top;
}
int main() {
f >> N;
for(int i = 1; i <= N; ++i)
f >> K[i];
for(int i = 1, x, y; i < N; ++i) {
f >> x >> y;
v[x].push_back(y);
}
DFS(1);
for(int i = 1; i <= N; ++i)
g << sol[i] << " ";
g << "\n";
f.close();
g.close();
return 0;
}