Pagini recente » Cod sursa (job #2629897) | Cod sursa (job #552279) | Cod sursa (job #2286774) | Cod sursa (job #842933) | Cod sursa (job #166746)
Cod sursa(job #166746)
#include<cstdio>
#include<vector>
std::vector<int> a[100001];
int n,i,s[100001],r[100001],st[1000],x,y;
void get(int vf,int niv)
{
if(s[vf]==0) r[vf]=0;
else r[vf]=r[st[niv-s[vf]]]+1;
st[niv]=vf;
for(int i=0;i<a[vf].size();i++)
get(a[vf][i],niv+1);
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&s[i]);
for(i=1;i<n;i++){
scanf("%d %d",&x,&y);
a[x].push_back(y);
r[y]=1;}
i=1;
while(r[i])i++;
get(i,1);
for(i=1;i<=n;i++)
printf("%d ",r[i]);
fclose(stdout);
return 0;
}