Pagini recente » Borderou de evaluare (job #2912098) | Cod sursa (job #2315276) | Cod sursa (job #684138) | Cod sursa (job #2623776) | Cod sursa (job #932970)
Cod sursa(job #932970)
#include<cstdio>
#include<list>
#define pb push_back
#define nxt (*it)
#define FOR(i,a,b)\
for(int i=a; i<=b; ++i)
#define ALL(g)\
for(typeof(g.begin()) it=g.begin(); it!=g.end(); ++it)
#define infile "cerere.in"
#define outfile "cerere.out"
#define nMax 100005
using namespace std;
list < int > v[nMax];
int K[nMax], ST[nMax], Ans[nMax];
int R, T[nMax];
int N;
void read(){
freopen(infile, "r", stdin);
scanf("%d", &N);
FOR(i,1,N)
scanf("%d", &K[i]);
int x, y;
FOR(i,1,N-1){
scanf("%d %d", &x, &y);
v[x].pb(y);
T[y] = x;
if(!T[x])
R = x;
}
fclose(stdin);
}
void DFS(int x){
ST[++ST[0]] = x;
if(K[x])
Ans[x] = Ans[ST[ST[0] - K[x]]] + 1;
ALL(v[x])
DFS(nxt);
ST[0] --;
}
void print(){
freopen(outfile, "w", stdout);
FOR(i,1,N)
printf("%d ", Ans[i]);
fclose(stdout);
}
int main(){
read();
DFS(R);
print();
return 0;
}