Pagini recente » Cod sursa (job #1732124) | Cod sursa (job #2374917) | Cod sursa (job #473600) | Cod sursa (job #252967) | Cod sursa (job #3313155)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n, a[100005], t[100005], x, y, h[100005], s, ans[100005], vis[100005];
vector <int> v[100005];
void dfs (int k, int val) {
vis[k] = 1;
for (auto x: v[k])
if (!vis[x]) {
h[val + 1] = x;
if (a[x] == 0)
ans[x] = 0;
else
ans[x] = ans[ h[val + 1 - a[x]] ] + 1;
// cout << x << ' ' << val+1 << ' ' <<
// val+1-a[x] << ' ' << ans[x] << endl;
dfs (x, val+1);
}
}
int main()
{
f >> n;
for (int i=1; i<=n; ++i)
f >> a[i];
for (int i=1; i<n; ++i) {
f >> x >> y;
v[x].push_back (y);
t[y] = x;
}
for (int i=1; i<=n; ++i)
if (t[i] == 0)
s = i;
h[s] = 0; ans[s] = 0; h[0] = s;
dfs (s, 0);
for (int i=1; i<=n; ++i)
g << ans[i] << ' ';
return 0;
}