Pagini recente » Cod sursa (job #622827) | Cod sursa (job #2947672) | Borderou de evaluare (job #740137) | Cod sursa (job #622163)
Cod sursa(job #622163)
#include <stdio.h>
#include <math.h>
#include <vector>
#define M 100010
using namespace std;
long n, a, b, i, S[M], ma[M], f[M], r, d[M];
vector < long > V[100010];
void df(long nod) {
S[S[0]] = nod;
if (ma[nod] == 0) f[nod] = 0;
else f[nod] = f[S[S[0] - ma[nod]]] + 1;
long len = V[nod].size();
for (long i = 0; i < len; ++i) {
++S[0];
df(V[nod][i]);
--S[0];
}
}
int main() {
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%ld", &n);
for (i = 1; i <= n; ++i) scanf("%ld", &ma[i]);
for (i = 1; i < n; ++i) {
scanf("%ld %ld", &a, &b);
V[a].push_back(b);
++d[b];
}
for (i = 1; i <= n; ++i) {
if (ma[i] == 0 && ma[i] == d[i]) {
r = i;
break;
}
}
df(r);
for (i = 1; i <= n; ++i) {
printf("%ld ", f[i]);
}
return 0;
}