Pagini recente » Cod sursa (job #3197040) | Cod sursa (job #2058345) | Cod sursa (job #1621160) | Cod sursa (job #2528797) | Cod sursa (job #986544)
Cod sursa(job #986544)
#include <cstdio>
#include <vector>
#include <stack>
#define FILEIN "cerere.in"
#define FILEOUT "cerere.out"
using namespace std;
const int NMAX = 100005;
int N;
int K[NMAX];
int G[NMAX];
vector<int> F[NMAX]; char P[NMAX];
int st[NMAX];
int top;
void dfs(int node) {
top++;
st[top] = node;
if (K[node] != 0) {
G[node] = G[st[top-K[node]]] + 1;
}
size_t i;
for ( i = 0; i < F[node].size(); i++ ) {
dfs(F[node][i]);
}
top--;
}
int main()
{
top = 0;
int i, x, y;
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
scanf("%d", &N);
for ( i = 1; i <= N; i++) {
scanf("%d", &K[i]);
}
for ( i = 1; i < N; i++) {
scanf("%d %d", &x, &y);
F[x].push_back(y);
P[y] = 1;
}
for ( i = 1; i <= N; i++) {
if (!P[i]) {
dfs(i);
break;
}
}
/* for ( i = 1; i <= N; i++ ) {
if (K[i] == 0) {
dfs2(i, 0);
}
}*/
for ( i = 1; i <= N; i++ ) {
printf("%d ", G[i]);
}
printf("\n");
return 0;
}