Pagini recente » Cod sursa (job #3182513) | Cod sursa (job #369993) | Cod sursa (job #575732) | Cod sursa (job #1413962) | Cod sursa (job #2033218)
# include <bits/stdc++.h>
using namespace std;
const int Nmax = 1e5 + 5;
vector <int> G[Nmax];
int n, i, N, x, y, tata, k[Nmax], ans[Nmax], st[Nmax];
bool visited[Nmax], ok[Nmax];
int dfs(int node)
{
st[++N] = node;
visited[node] = true;
if (!k[node]) ans[node] = 0;
else ans[node] = ans[ st[N - k[node]] ] + 1;
for (auto &it: G[node])
if (!visited[it])
{
visited[it] = true;
dfs(it);
}
--N;
}
int main ()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d\n", &n);
for (i = 1; i <= n; ++i)
scanf("%d ", &k[i]);
for (i = 1; i < n; ++i)
{
scanf("%d %d\n", &x, &y);
G[x].push_back(y);
ok[y] = true;
}
for (i = 1; i <= n; ++i)
if (!ok[i]) tata = i;
dfs(tata);
for (i = 1; i <= n; ++i)
printf("%d ", ans[i]);
return 0;
}