Cod sursa(job #364659)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 16 noiembrie 2009 18:39:33
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>
#include <vector>
#define NMAX 100010
using namespace std;

vector <int> G[NMAX];
int n, K[NMAX], S[NMAX], Sol[NMAX], h;
char U[NMAX], V[NMAX];

void df(int nod)
{
	int i;
	h++;
	S[h]=nod;
	U[nod]=1;
	if (K[nod])
		Sol[nod]=Sol[S[h-K[nod]]]+1;
	for (i=0; i<G[nod].size(); i++) 
		if (!U[G[nod][i]])
			df(G[nod][i]);
	h--;
}

int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	int i, r, x, y;
	for (i=1; i<=n; i++) scanf("%d",&K[i]);
	for (i=1; i<n; i++)
	{
		scanf("%d %d",&x, &y);
		G[x].push_back(y);
		V[y]++;
	}
	for (r=1; r<=n && V[r]; r++);
	K[r]=0;	
	df(r);
	for (i=1; i<=n; i++) printf("%d ",Sol[i]);
}