Cod sursa(job #959830)

Utilizator dunhillLotus Plant dunhill Data 8 iunie 2013 22:46:24
Problema Cerere Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <vector>
#define MAXN 100003
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

int i, N, M, j, A, B, head, x;
int K[MAXN], st[MAXN], sol[MAXN];
vector <int> v[MAXN];
bool used[MAXN], t[MAXN];

void DFS(int nod) {
	used[nod] = true;
	st[++head] = nod;
	if (K[nod]) 
		sol[nod] = sol[st[head - K[nod]]] + 1;
	vector <int> :: iterator it, fin;
	it = v[nod].begin(); fin = v[nod].end();
	for (; it != fin; ++it) {
		if (!used[*it]) {
			DFS(*it);
		}
	}
	--head;
}
int main() {
	f >> N; M = N - 1;
	for (i = 1; i <= N; ++i) f >> K[i];
	while (M--) {
		f >> A >> B;
		v[A].push_back(B);
		v[B].push_back(A);
		t[B] = true;
	}
	for (i = 1; i <= N; ++i)
		if (!t[i]) break;
	DFS(i);
	for (i = 1; i <= N; ++i)
		g << sol[i] << ' ';
	return 0;
}