Pagini recente » Cod sursa (job #1376839) | Cod sursa (job #888060) | Cod sursa (job #668401) | Cod sursa (job #347120) | Cod sursa (job #148352)
Cod sursa(job #148352)
#include <stdio.h>
int n, s[100001], r[100001], sol[100001], k, rad;
typedef struct nod
{
int x;
nod *a;
} *pNod;
pNod v[100001];
void citire()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int x, y, i;
pNod p;
scanf("%d",&n);
for (i = 1; i <= n; i++) scanf("%d", &r[i]);
for (i = 1; i < n; i++)
{
scanf("%d %d",&x,&y);
p = new nod;
p -> x = y;
p -> a = v[x];
v[x] = p;
s[y]++;
}
}
void DF(int nod)
{
s[++k] = nod;
if (!r[nod]) sol[nod] = 0;
else sol[nod] = sol[s[k - r[nod]]] + 1;
pNod p;
for (p = v[nod]; p != NULL; p = p -> a)
{
DF(p->x);
--k;
}
}
int main()
{
citire();
int i;
for (i = 1; i <= n; i++) if (!s[i]) {rad = i; break;}
DF(rad);
for (i = 1; i <= n; i++) printf("%d ",sol[i]);
return 0;
}