Pagini recente » Cod sursa (job #2249844) | Cod sursa (job #2718124) | Cod sursa (job #1134941) | Cod sursa (job #194852) | Cod sursa (job #1170449)
#include<stdio.h>
#include<stdlib.h>
#define fr(i,a,b) for(i=a;i<b;++i)
#define N 100000
int s[N],S,X[N],k[N],*o[N],O[N];
void dfs(int i){
s[S++]=i;
X[i]=k[i]?1+X[s[S-1-k[i]]]:0;
int j;
fr(j,0,O[i]) dfs(o[i][j]);
--S;
}
int main(){
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int i,n,x,y;
scanf("%i",&n);
fr(i,0,n)scanf("%i",k+i);
fr(i,1,n){
scanf("%i%i",&x,&y);
--x;
--y;
o[x]=(int*)realloc(o[x],++O[x]*sizeof(int));
o[x][O[x]-1]=y;
X[y]=1;
}
fr(i,0,n)if(!X[i]){dfs(i);break;};
fr(i,0,n)printf("%i ",X[i]);
return 0;
}