Pagini recente » Cod sursa (job #807019) | Cod sursa (job #2192598) | Cod sursa (job #2587490) | Cod sursa (job #2071199) | Cod sursa (job #1025501)
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 100005
vector <int> a[NMAX];
int n,x,y,G[NMAX],A[NMAX],S[NMAX];
bool M[NMAX];
void dfs(int s, int niv)
{
int i;
A[niv]=s;
if (!G[s]) S[s]=0;
else S[s]=S[A[niv-G[s]]]+1;
for (i=0;i<a[s].size();++i)
dfs(a[s][i],niv+1);
}
int main()
{
int i;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&G[i]);
for (i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
M[y]=true;
}
for (i=1,x=0;i<=n && !x;++i)
if (!M[i]) x=i;
dfs(x,1);
for (i=1;i<=n;++i)
printf("%d ",S[i]);
printf("\n");
return 0;
}