Pagini recente » Cod sursa (job #2735756) | Cod sursa (job #2659602) | Cod sursa (job #2491141) | Cod sursa (job #3169235) | Cod sursa (job #780527)
Cod sursa(job #780527)
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
#define nmax 100010
int sol[nmax], used[nmax], K[nmax], stack[nmax], A, B, N;
vector<int> G[nmax];
void DFS(int node, int pos)
{
if(K[node] == 0) sol[node] = 0;
else sol[node] = 1 + sol[ stack[pos - K[node]] ];
stack[pos] = node;
for(vector<int> :: iterator it = G[node].begin(); it != G[node].end(); ++it)
DFS(*it, pos + 1);
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int i;
scanf("%i", &N);
for(i = 1; i <= N; i++) scanf("%i", &K[i]);
int Q = N * (N + 1) / 2;
for(i = 1; i < N; i++)
{
scanf("%i %i", &A, &B);
G[A].push_back(B);
Q -= B;
}
DFS(Q, 1);
for(i = 1; i <= N; i++) printf("%i ", sol[i]);
return 0;
}