Pagini recente » Cod sursa (job #2959303) | Cod sursa (job #1719766) | Cod sursa (job #566325) | Cod sursa (job #281207) | Cod sursa (job #1028426)
#include <cstdio>
#include <vector>
using namespace std;
vector<int>v[100000];
int d[100000],v2[100000],sol[100000];
char v1[100000];
int n,i,x,y;
void adancime(int x,int y)
{
int i,lim;
v2[y]=x;
if(d[x]==0) sol[x]=0;
else sol[x]=sol[v2[y-d[x]]]+1;
lim=v[x].size();
for(i=0;i<lim;i++) adancime(v[x][i],y+1);
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&d[i]);
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v1[y]=1;
}
for(i=1;i<=n;i++)
{
if(v1[i]==0)
{
adancime(i,1);
}
}
for(i=1;i<=n;i++) printf("%d ",sol[i]);
fclose(stdin);fclose(stdout);
return 0;
}