Pagini recente » Cod sursa (job #2870434) | Cod sursa (job #1660641) | Cod sursa (job #1096961) | Cod sursa (job #802099) | Cod sursa (job #355915)
Cod sursa(job #355915)
#include<stdio.h>
#include<algorithm>
using namespace std;
long x[100005],st[100005],z[100005],u,intel[100005],n,i,f[100005];
struct gra{long a,b;}a[100005];
long cmp(gra a,gra b)
{if(a.a<b.a||(a.a==b.a&&a.b<=b.b))return 1;
return 0;}
void hbnf()
{long p;
p=x[st[u]];
z[st[u]]=z[st[u-intel[st[u]]]]+1;
if(p)
for(;a[p].a==st[u];++p)
{st[++u]=a[p].b;
hbnf();
--u;}
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;++i)
scanf("%ld",&intel[i]);
for(i=1;i<n;++i)
{scanf("%ld%ld",&a[i].a,&a[i].b);
f[a[i].b]++;}
sort(a+1,a+n,cmp);
for(i=1;i<n;++i)
if(!x[a[i].a])x[a[i].a]=i;
for(i=1;i<=n;++i)
if(!f[i])break;
st[1]=i;
u=1;
hbnf();
for(i=1;i<=n;++i)printf("%ld ",z[i]-1);
printf("\n");
return 0;
}