Pagini recente » Cod sursa (job #1543653) | Cod sursa (job #15805) | Cod sursa (job #513543) | Cod sursa (job #2812714) | Cod sursa (job #277538)
Cod sursa(job #277538)
#include <iostream>
#define maxn 100001
using namespace std;
struct nod {int inf; nod *urm;} *arb[maxn];
int tata[maxn],st[maxn],sol[maxn];
int n,rad,sir[maxn];
void baga(int x, int y)
{
nod *q=new nod;
q->inf=y;
q->urm=arb[x];
arb[x]=q;
}
void dfs(int x,int niv)
{
st[niv]=x;
sol[x]=sol[st[niv-sir[x]]]+1;
for(nod *q=arb[x];q;q=q->urm)
dfs(q->inf,niv+1);
}
int main()
{
int x,y;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&sir[i]);
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
baga(x,y);
tata[y]=x;
}
for(int i=1;i<n;i++)
if(tata[i]==0)
rad=i;
dfs(rad,1);
for(int i=1;i<=n;i++)
printf("%d ",sol[i]-1);
return 0;
}