Cod sursa(job #415631)

Utilizator Addy.Adrian Draghici Addy. Data 11 martie 2010 17:16:27
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#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 < A[nod].size(); i++)
		DFS(A[nod][i], niv + 1);
}

int main() {
	
	FILE *f = fopen("cerere.in", "r");
	
	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);
		viz[y] = 1;
	}
	
	fclose(f);
	
	for (i = 1; i <= n; i++)
		if (!viz[i])
			DFS(i, 1);
	
	FILE *g = fopen("cerere.out", "w");
	
	for (i = 1; i <= n; i++)
		fprintf(g, "%d ", sol[i]);
	
	fclose(g);
	
	return 0;
}