Cod sursa(job #361998)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 7 noiembrie 2009 16:03:51
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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], Vf[Nmax];
int i, n , x, y, start;

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);
		Vf[y] = 1;
		A[x].push_back(y);
	}
	
	for (i = 1 ; i <= n ; i++) if (!Vf[i]) start = i;
	
	DFS(start,1);
	
	for (i = 1 ; i <= n ; i++)
		fprintf(g, "%d ", G[i]);
	
	fclose(f);
	fclose(g);
	return 0;
	
}