Pagini recente » Cod sursa (job #2735801) | Cod sursa (job #330073) | Borderou de evaluare (job #3121157) | Cod sursa (job #357705) | Cod sursa (job #3333635)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
struct Nod{ int nod;
Nod *leg;
}*L[100001];
int k[100001],sol[100001],t[100001],n,x,y;
int sef[100001];
void DF(int nod,int niv)
{ sef[niv]=nod;
if(k[nod]==0) sol[nod]=0;
else sol[nod]=sol[sef[niv-k[nod]]]+1;
Nod *p;
for(p=L[nod];p;p=p->leg) DF(p->nod,niv+1);
}
int main()
{ f>>n;
for(int i=1;i<=n;i++) f>>k[i];
for(int i=1;i<n;i++)
{ f>>x>>y;
Nod *p;
p=new Nod;
p->nod=y,p->leg=L[x];
L[x]=p;
t[y]=x;
}
int rad=1;
while(t[rad]) rad++;
DF(rad,1);
for(int i=1;i<=n;i++) g<<sol[i]<<" ";
g<<'\n';
return 0;
}