Cod sursa(job #865783)

Utilizator ELHoriaHoria Cretescu ELHoria Data 26 ianuarie 2013 23:15:29
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 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]++];
			numV[v]++;
			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;
}