Pagini recente » Cod sursa (job #3203358) | Cod sursa (job #1473790) | Cod sursa (job #1873257) | Cod sursa (job #2140789) | Cod sursa (job #168792)
Cod sursa(job #168792)
using namespace std;
#include <cstdio>
#include <vector>
#define nmax 100005
vector<int> L[nmax];
int S[nmax], A[nmax], G[nmax], K[nmax];
int N;
void parcour (int node, int tata)
{
vector<int>::iterator it;
S[++S[0]] = node;
if (K[node] == 0)
A[node] = 0;
else
A[node] = 1+A[S[S[0] - K[node]]];
for (it = L[node].begin(); it != L[node].end(); ++it)
if (*it != tata)
parcour(*it, node);
S[0]--;
}
int main()
{
int i, x, y;
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &N);
for (i = 0; i < N; ++i)
{
scanf("%d", &x);
K[i] = x;
}
for (i = 1; i < N; ++i)
{
scanf("%d%d", &x, &y);
x--, y--;
L[x].push_back(y);
L[y].push_back(x);
G[y]++;
}
for (i = 0; i < N && G[i]; ++i);
parcour(i, -1);
for (i = 0; i < N; ++i)
printf("%d ", A[i]);
return 0;
}