Cod sursa(job #1053435)

Utilizator ELHoriaHoria Cretescu ELHoria Data 12 decembrie 2013 19:12:39
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.8 kb
#include <fstream>
#include <cstring>
#include <vector>

using namespace std;

ifstream cin("cerere.in");
ofstream cout("cerere.out");

const int NMAX = 100002, logMax = 18;
int N, K[NMAX];
int C[NMAX];
vector<int> G[NMAX];
int st[NMAX], numV[NMAX];

int main()
{
	cin >> N;
	for (int i = 1; i <= N; i++) {
		cin >> K[i];
	}
	int root = 0;
	for (int i = 1; i < N; i++) {
		int A, B;
		cin >> A >> B;
		G[A].push_back(B);
		root ^= B;
		root ^= i;
	}
	root ^= N;
	st[++st[0]] = root;
	while (st[0] > 0) {
		int v = st[st[0]];
		if (numV[v] == (int)G[v].size()) {
			st[0]--;
		}
		else {
			int w = G[v][numV[v]++];
			st[++st[0]] = w;
			if (K[w] > 0) {
				C[w] = C[st[st[0] - K[w]]] + 1;
			}
		}
	}

	for (int i = 1; i <= N; i++) {
		cout << C[i] << " ";
	}
	return 0;
}