Cod sursa(job #361993)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 7 noiembrie 2009 15:54:59
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream.h>
#include<vector>
#define Nmax 100010

using namespace std;

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

void DFS(int k, int niv){
	
	int j;
	VIZ[k] = 1;
	S[niv] = k;
	if (K[k] == 0) G[k] = 0;
	else G[k] = G[ S[ niv- K[k] ] ] + 1;
		
	
	for (j = 0 ; j < A[k].size() ; j++)
		if (VIZ[ A[k][j] ] == 0)
			DFS(A[k][j], niv + 1);	
}


int main(){
	
	FILE *f = fopen("cerere.in", "r");
	FILE *g = fopen("cerere.out", "w");
	
	fscanf(f, "%d", &n);
	
	for (i = 1 ; i <= n ; i++)
		fscanf(f, "%d", &K[i]);
	
	for (i = 1 ; i < n ; i++){
		fscanf(f, "%d %d", &x, &y);
		A[x].push_back(y);
	}
	
	DFS(1,1);
	
	for (i = 1 ; i <= n ; i++)
		fprintf(g, "%d ", G[i]);
	
	fclose(f);
	fclose(g);
	return 0;
	
}