Pagini recente » Rating Mihai Alexandru (AlexMihai1801) | Cod sursa (job #683755) | Cod sursa (job #2861185) | Cod sursa (job #2380178) | Cod sursa (job #205711)
Cod sursa(job #205711)
#include <stdio.h>
#include <math.h>
#include <vector.h>
#include <stack.h>
using namespace std;
#define NMAX 100004
#define sz size()
#define pb push_back
vector <int> a[NMAX];
long k[NMAX], n, nr[NMAX], vf, rez[NMAX], g[NMAX];
void df(long x) {
long i;
nr[vf] = x;
rez[x] = 1 + rez[ nr[vf - k[x]] ];
if (!k[x]) {
rez[x] = 0;
}
for (i = 0; i < a[x].sz; ++i) {
++vf;
df(a[x][i]);
--vf;
}
}
int main() {
freopen("cerere.in", "rt", stdin);
freopen("cerere.out", "wt", stdout);
long i, x, y;
scanf("%ld", &n);
for (i = 1; i <= n; ++i) {
scanf("%ld", k + i);
}
for (i = 1; i < n; ++i) {
scanf("%ld %ld", &x, &y);
a[x].pb(y);
++g[y];
}
long rad = 0;
for (i = 1; i <= n; ++i) {
if (k[i] == 0 && g[i] == 0) {
rad = i;
break;
}
}
df(rad);
for (long i = 1; i <= n; ++i) {
printf("%ld ", rez[i]);
}
printf("\n");
return 0;
}