Pagini recente » Cod sursa (job #2960965) | Cod sursa (job #1347933) | Cod sursa (job #1269179) | Cod sursa (job #672096) | Cod sursa (job #1347759)
#include<cstdio>
#define MAX_N 100000
using namespace std;
int v[MAX_N+1];
int fiu[MAX_N];
int urm[MAX_N];
int lst[MAX_N];
int st[MAX_N+1];
int k;
int rasp[MAX_N+1];
void adauga(int tip,int i){
urm[i]=lst[tip];
lst[tip]=i;
}
void parc(int nod){
int p;
k++;
if (v[nod]==0) st[k]=0;
else st[k]=st[k-v[nod]]+1;
rasp[nod]=st[k];
p=lst[nod];
while(p!=0){
parc(fiu[p]);
p=urm[p];
}
k--;
}
int main(){
freopen ("cerere.in","r",stdin);
freopen ("cerere.out","w",stdout);
int n,i,a,rad;
scanf ("%d",&n);
for(i=1;i<=n;i++)
scanf ("%d",&v[i]);
rad=n;
for(i=1;i<n;i++){
scanf ("%d%d",&a,&fiu[i]);
rad=rad^i^fiu[i];
adauga(a,i);
}
k=0;
parc(rad);
for(i=1;i<=n;i++)
printf ("%d ",rasp[i]);
return 0;
}