Pagini recente » Cod sursa (job #1594603) | Cod sursa (job #49828) | Cod sursa (job #1008206) | Cod sursa (job #1388408) | Cod sursa (job #601727)
Cod sursa(job #601727)
#include <stdio.h>
#define MAX 100001
int sol[MAX], c[MAX], n, viz[MAX], g[MAX], stiva[MAX], poz=1;
struct nod
{
int info;
nod *next;
} *a[MAX];
void df(int nod);
int main()
{
int i, t, f, rad;
nod *nou;
FILE *fin = freopen("cerere.in", "r", stdin);
FILE *fout = freopen("cerere.out", "w", stdout);
scanf("%d", &n);
sol[0] = 0;
for(i = 1 ;i<=n;++i)
{
scanf("%d", &c[i]);
}
for(i=0;i<n-1;++i)
{
scanf("%d %d", &t, &f);
g[f]++;
nou = new nod;
nou->info = f;
nou->next = a[t];
a[t] = nou;
}
for(i=1;i<=n;++i)
{
if(g[i]==0)
{
rad = i;
break;
}
}
df(rad);
for(i=1;i<=n;++i)
{
printf("%d ", sol[i]);
}
return 0;
}
void df(int nd)
{
nod *curent;
int pozc;
pozc = poz;
viz[nd] = 1;
stiva[poz] = nd;
if(c[nd] == 0)
{
sol[nd] = 0;
}
else
{
sol[nd] = 1 + sol[stiva[poz-c[nd]]];
}
poz++;
for(curent = a[nd];curent;curent = curent->next)
{
if(!viz[curent->info])
{
df(curent->info);
}
}
poz = pozc;
}