Pagini recente » Cod sursa (job #2571622) | Cod sursa (job #90921) | Cod sursa (job #1600383) | Cod sursa (job #1641670) | Cod sursa (job #66102)
Cod sursa(job #66102)
#include <cstdio>
#define maxn 100001
FILE *in = fopen("cerere.in","r"), *out = fopen("cerere.out","w");
struct graf
{
int nod;
graf *next;
};
int n;
graf *a[maxn];
int Ki[maxn];
int rez[maxn];
int rad;
int st[maxn];
int k = 0;
void add(graf *&p, int nod)
{
graf *q = new graf;
q->next = p;
q->nod = nod;
p = q;
}
void read()
{
fscanf(in, "%d", &n);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &Ki[i]);
int x, y;
for ( int i = 1; i < n; ++i )
{
fscanf(in, "%d %d", &x, &y);
add(a[x], y);
++st[y];
}
}
void DF(int nod)
{
st[++k] = nod;
if ( Ki[nod] == 0 )
rez[nod] = 0;
else
rez[nod] = rez[st[k-Ki[nod]]] + 1;
graf *q = a[nod];
while ( q )
{
DF(q->nod);
--k;
q = q->next;
}
}
int main()
{
read();
for ( int i = 1; i <= n; ++i )
if ( st[i] == 0 )
{
rad = i;
break;
}
DF(rad);
for ( int i = 1; i <= n; ++i )
fprintf(out, "%d ", rez[i]);
return 0;
}