Pagini recente » Cod sursa (job #125464) | Cod sursa (job #1984906) | Cod sursa (job #175770) | Cod sursa (job #2017665) | Cod sursa (job #414445)
Cod sursa(job #414445)
# include <fstream>
# include <cstdlib>
using namespace std;
int n, K[100003], t[100003], g[100003], niv[100003], in[100003], rad, *a[100003];
void add (int i, int j)
{
a[i][0]++;
a[i]=(int *)realloc (a[i], (a[i][0]+1)*4);
a[i][a[i][0]]=j;
}
void read ()
{
ifstream fin ("cerere.in");
fin>>n;
for (int i=1;i<=n;i++)
fin>>K[i];
int x, y;
for (int i=1;i<=n;i++)
{
a[i]=(int *) malloc (4);
a[i][0]=0;
}
for (int i=1;i<n;i++)
{
fin>>x>>y;
t[y]=x;
in[y]++;
add (x, y);
}
}
void DF (int k, int x)
{
niv[x]=k;
if (K[k])
g[k]=g[niv[x-K[k]]]+1;
for (int i=1;i<=a[k][0];i++)
DF(a[k][i], x+1);
}
void solve ()
{
for (int i=1;i<=n;i++)
if (!in[i])
DF(i, 1);
}
void afis ()
{
freopen ("cerere.out", "w", stdout);
for (int i=1;i<=n;i++)
printf("%d ", g[i]);
}
int main()
{
read ();
solve ();
afis ();
return 0;
}