Pagini recente » Cod sursa (job #2991097) | Cod sursa (job #2344918) | Cod sursa (job #783913) | Cod sursa (job #1331745) | Cod sursa (job #1091940)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 100003
int n, nr = 0;
int q[NMAX], sol[NMAX], tata[NMAX];
bool used[NMAX], r[NMAX];
vector <int> v[NMAX];
void ReadData()
{
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
scanf ("%d", &tata[i]);
for (int i = 1, a, b; i <= n - 1; ++i)
{
scanf ("%d %d", &a, &b);
v[a].push_back(b);
r[b] = true;
}
}
void DFS (int k)
{
used[k] = 1;
q[++nr] = k;
sol[k] = sol[q[nr - tata[k]]] + 1;
for (int i = 0; i < v[k].size(); ++i)
{
if (!used[v[k][i]])
{
used[v[k][i]] = true;
DFS (v[k][i]);
}
}
--nr;
}
void Solve()
{
for (int i = 1; i <= n; ++i)
{
if (!r[i])
{
DFS (i);
break;
}
}
}
void WriteData()
{
for (int i = 1; i <= n; ++i)
printf ("%d ", sol[i] - 1);
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
ReadData();
Solve();
WriteData();
}