Pagini recente » Cod sursa (job #573742) | Cod sursa (job #1498514) | Autentificare | Cod sursa (job #1653746) | Cod sursa (job #2017604)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int nr,verif[100001],lista[100001],nod[100001],next[100001],v[100001],rez[100001],stiva[100001];
void add(int x,int y)
{
nr++;
next[nr]=lista[x];
nod[nr]=y;
lista[x]=nr;
}
int G()
{
int nr=0;
char c;
c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
{
nr=nr*10+c-'0';
c=getchar();
}
return nr;
}
void dfs(int x,int p)
{
int z;
stiva[p]=x;
rez[x]=rez[stiva[p-v[x]]]+(v[x]>0);
z=lista[x];
while(z)
{
dfs(nod[z],p+1);
z=next[z];
}
stiva[p]=0;
}
int main()
{
int i,n,x,y;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
n=G();
for(i=1; i<=n; i++)
v[i]=G();
for(i=1; i<n; i++)
{
x=G();
y=G();
verif[y]=1;
add(x,y);
}
for(i=1; verif[i]==1; i++);
dfs(i,1);
for(i=1; i<=n; i++)
printf("%d ",rez[i]);
return 0;
}