Pagini recente » Cod sursa (job #39996) | Cod sursa (job #255229) | Cod sursa (job #2363055) | Cod sursa (job #1262060) | Cod sursa (job #29321)
Cod sursa(job #29321)
#include<stdio.h>
#define maxn 100001
long next[maxn];
long first[maxn],n;
long v[maxn*2];
long nr[maxn];
long sol[maxn];
long h[maxn];
long sel[maxn];
void df(long a,long b)
{
h[b] = a;
sel[a] = 1;
if(nr[a] == 0 ) sol[a] = 0;
else sol[a] = sol[h[b-nr[a]]]+1;
long x = first[a];
while(x)
{
if(sel[v[x]]==0) df(v[x],b+1);
x = next[x];
}
}
int main()
{
long i,a,b;
long double s;
freopen("cerere.in","rt",stdin);
freopen("cerere.out","w",stdout);
scanf("%ld",&n);
s= n*(n+1)/2;
for(i=1;i<=n;i++)
scanf("%ld",&nr[i]);
for(i = 1; i <= n-1; i++)
{
scanf("%ld %ld",&a,&b);
v[i*2-1] = a;
v[i*2] = b;
next[i*2-1] = first[b];
next[i*2] = first[a];
first[b] = i*2-1;
first[a] = i*2;
s-=b;
}
df(long(s),1);
for(i=1;i<=n;i++) printf("%ld ",sol[i]);
return 0;
}