Cod sursa(job #1033285)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 16 noiembrie 2013 18:07:14
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int MAXN = 100005;

int n, boss[MAXN], pas[MAXN], visited[MAXN], coada[MAXN], i, a, b, vf = -1;
vector<int> graph[MAXN];

void Parcurge(int nod)
{
	visited[nod] = 1;
	coada[++vf] = nod;

	if (boss[nod] == 0) pas[nod] = 0;
	else pas[nod] = pas[coada[vf - boss[nod]]] + 1;

	vector<int>::iterator it;
	for (it = graph[nod].begin(); it != graph[nod].end(); ++it)
		if (!visited[*it])
			Parcurge(*it);

	--vf;
}

int main() {
	f >> n;

	for (i = 1; i <= n; i++)
		f >> boss[i];
	for (i = 1; i <= n-1; i++)
	{
		f >> a >> b;
		graph[a].push_back(b);
		graph[b].push_back(a);
	}

	Parcurge(1);

	for (i = 1; i <= n; i++)
		g << pas[i] << ' ';

	return 0;
}