Cod sursa(job #562472)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 23 martie 2011 09:28:25
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#include <vector>
using namespace std;
#define DIM 100005

ifstream fi ("cerere.in");
ofstream fo ("cerere.out");

int N, K[DIM], C[DIM], S[DIM];
vector <int> F[DIM];

void dfs (int n, int niv)
{
	S[niv] = n;
	if (K[n]) 
		C[n] = C[S[niv - K[n]]] + 1;
	else
		C[n] = 0;
	for (int i = 0; i < F[n].size(); i++)
		dfs (F[n][i], niv + 1);
}

int main ()
{
	fi >> N;
	for (int i = 1; i <= N; i++)
	{	
		fi >> K[i];
		C[i] = -1;		
	}
	for (int i = 1, a, b; i <= N - 1; i++)
	{	
		fi >> a >> b;
		F[a].push_back (b);
	}	
	
	for (int i = 1; i <= N; i++)
		if (C[i] == -1 && K[i] == 0)
			dfs (i, 1);
	
	for (int i = 1; i <= N; i++)
		fo << C[i] << ' ';
	return 0;
}