Pagini recente » Cod sursa (job #1539704) | Cod sursa (job #2836419) | Cod sursa (job #889467) | Cod sursa (job #2736938) | Cod sursa (job #1609333)
#include <fstream>
#include <vector>
#include <cstdio>
#include <queue>
#define NMAX 100005
using namespace std;
int k[NMAX] , sol[NMAX] , t[NMAX] , stramos[NMAX];
int n , x , y , niv;
vector <vector <int> > v;
queue <int> coada;
void bfs(int nod);
void read(int &x) {
int sign = 1;
char ch;
while(!isdigit(ch = getchar())) {
if(ch == '-') {
sign = -1;
}
else {
sign = 1;
}
}
x = 0;
do {
x = x * 10 + ch - '0';
}while(isdigit(ch = getchar()));
x *= sign;
}
int main() {
freopen("cerere.in" , "r" , stdin);
freopen("cerere.out" , "w" , stdout);
read(n);
for(int i = 1 ; i <= n ; ++i) {
read(k[i]);
}
v.resize(n + 5);
for(int i = 1 ; i < n ; ++i) {
read(x) , read(y);
v[x].push_back(y);
t[y] = x;
}
int p = 1;
while(t[p] != 0) {
p = t[p];
}
bfs(p);
for(int i = 1 ; i <= n ; ++i) {
printf("%d " , sol[i]);
}
return 0;
}
void bfs(int nod) {
++niv;
stramos[niv] = nod;
if(k[nod] == 0) {
sol[nod] = 0;
}
else {
sol[nod] = sol[stramos[niv - k[nod]]] + 1;
}
int nr = v[nod].size();
for(int i = 0 ; i < nr ; ++i) {
bfs(v[nod][i]);
}
--niv;
}