Pagini recente » Cod sursa (job #898192) | Cod sursa (job #2108343) | Cod sursa (job #2273049) | Cod sursa (job #702401) | Cod sursa (job #2212913)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N_MAX = 1e5;
int n;
int k[N_MAX + 2];
vector<int> gr[N_MAX + 2];
int top;
int st[N_MAX + 2], ans[N_MAX + 2];
void dfs(int node, int daddy)
{
st[++top] = node;
if(k[node])
ans[node] = ans[st[top - k[node]]] + 1;
for(auto it: gr[node])
if(it != daddy)
dfs(it, node);
top--;
}
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
in >> k[i];
for(int i = 1; i < n; i++)
{
int x, y;
in >> x >> y;
gr[x].push_back(y);
}
dfs(1, 0);
for(int i = 1; i <= n; i++)
out << ans[i] << ' ';
out << '\n';
return 0;
}