Pagini recente » Cod sursa (job #885052) | Cod sursa (job #2334150) | Cod sursa (job #1792842) | Cod sursa (job #970519) | Cod sursa (job #633239)
Cod sursa(job #633239)
//NOTA: Sursa copiata pentru a testa consecventa evaluatorului
#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], d[M], s;
vector < long > V[M];
void df(long nod) {
S[s] = nod;
if (ma[nod] == 0) f[nod] = 0;
else f[nod] = f[S[s - ma[nod]]] + 1;
for (long i = 0; i < V[nod].size(); ++i) {
++s;
df(V[nod][i]);
--s;
}
}
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];
}
long r = 1;
for (i = 1; i <= n; ++i) {
if (ma[i] == 0 && d[i] == 0) {
r = i;
break;
}
}
df(r);
for (i = 1; i <= n; ++i) {
printf("%ld ", f[i]);
}
return 0;
}