Cod sursa(job #414445)

Utilizator loginLogin Iustin Anca login Data 10 martie 2010 08:32:31
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
# 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;
}