Pagini recente » Cod sursa (job #1000025) | Cod sursa (job #1111100) | Cod sursa (job #608600)
Cod sursa(job #608600)
#include <cstdio>
#include <vector>
using namespace std;
#define Nmax 100001
int N, A, B, W[Nmax], i, P[Nmax], L[Nmax], K[Nmax];
vector<int> G[Nmax];
void df(int nod, int lvl)
{
vector<int> :: iterator it;
L[lvl] = nod;
P[nod] = K[nod] == 0 ? 0 : P[ L[lvl-K[nod]] ] + 1;
for (it=G[nod].begin(); it<G[nod].end(); ++it)
df(*it, lvl+1);
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d", &N);
for (i=1; i<=N; ++i)
scanf("%d", &K[i]);
for (i=1; i<N; ++i)
{
scanf("%d %d", &A, &B);
G[A].push_back(B);
W[B] = 1;
}
for (i=1; i<=N; ++i)
if (!W[i]) { df(i, 0); break; }
for (i=1; i<=N; ++i)
printf("%d ", P[i]);
printf("\n");
return 0;
}