Cod sursa(job #1053696)

Utilizator Robert29FMI Tilica Robert Robert29 Data 12 decembrie 2013 21:48:57
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.79 kb
#include<stdio.h>
#include<vector>
using namespace  std;
FILE*f = fopen("cerere.in", "r");
FILE*g = fopen("cerere.out", "w");

vector <int> v[100001];
int sol[100001], k, n, x, y, w[100001], j, s[100001], i;
char viz[100001];

void dfs(int nod, int niv){


	s[niv] = nod;
	if (w[nod])
		sol[nod] = sol[s[niv - w[nod]]] + 1;
	else
		sol[nod] = 0;
	for (int i = 0; i<v[nod].size(); ++i)
		dfs(v[nod][i], niv + 1);


}
int main() {
	fscanf(f, "%d", &n);
	for (i = 1; i <= n; ++i)
		fscanf(f, "%d", &w[i]);

	for (i = 1; i<n; ++i){
		fscanf(f, "%d%d", &x, &y);
		v[x].push_back(y);
		viz[y] = 1;
	}

	for (i = 1; i <= n; ++i)
	if (viz[i] == 0){
		dfs(i, 1);
		break;
	}



	for (i = 1; i <= n; ++i)
		fprintf(g, "%d ", sol[i]);
	fclose(g);
	fclose(f);
	return 0;
}