Cod sursa(job #554131)

Utilizator rares192Preda Rares Mihai rares192 Data 14 martie 2011 17:13:53
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#include <vector> 
using namespace std; 
 
#define Nmax 100050 

 
int K[Nmax], S[Nmax], viz[Nmax], sol[Nmax], n, i, x, y; 
vector <int> A[Nmax]; 

void DFS(int nod, int niv)
{
	int i;     
	S[niv] = nod; 

	if (K[nod]) 
		sol[nod] = sol[S[niv - K[nod]]] + 1; 
     
	 for (i = 0; i < (int)A[nod].size(); i++) 
		DFS(A[nod][i], niv + 1); 
} 
 
 
int main()
{ 
	
	ifstream fin("cerere.in");

	fin >> n;
	for (i = 1; i <= n; i++) 
       fin >> K[i]; 
	
	for (i = 1; i < n; i++)
	{ 
       fin >> x >> y; 
	   A[x].push_back(y); 
	   viz[y] = 1;
	}
    
	for (i = 1; i <= n; i++) 
		if (!viz[i])
			DFS(i, 1); 
     
	ofstream fout("cerere.out"); 

	for (i = 1; i <= n; i++) 
		fout << sol[i] << " "; 

	return 0; 
}