Cod sursa(job #1068550)

Utilizator vld7Campeanu Vlad vld7 Data 28 decembrie 2013 14:37:37
Problema Cerere Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

const int MAX_N = 100005;

unsigned int n, Stack[MAX_N], K[MAX_N], ans[MAX_N], radacina;
bool used[MAX_N];

vector <int> L[MAX_N];

void read() {
	f >> n;
	for (int i = 1; i <= n; i++)
		f >> K[i];
	
	radacina = n * (n + 1) / 2;
	for (int i = 1; i <= n - 1; i++) {
		int a, b;
		
		f >> a >> b;
		L[a].push_back (b);
		radacina -= b;
	}
}

void dfs (int nod, int depth) {
	used[nod] = 1;
	Stack[depth] = nod;
	ans[nod] += ans[Stack[depth - K[nod]]] + 1;
	
	for (size_t i = 0; i < L[nod].size(); i++) {
		int fiu = L[nod][i];
		if (!used[fiu])
			dfs (fiu, depth + 1);
	}
}

int main() {
	read();
	dfs (radacina, 0);
	
	for (int i = 1; i <= n; i++)
		g << ans[i] - 1 << " ";
	
	return 0;
}