Cod sursa(job #990646)

Utilizator cont_de_testeCont Teste cont_de_teste Data 28 august 2013 19:49:14
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

const int MAX_N = 100100;

int n, root;

int wh[MAX_N];
vector<int> g[MAX_N];

int stk[MAX_N];
int soln[MAX_N];

inline void dfs(const int &node) {
	stk[++stk[0]] = node;
	if (wh[node] == 0)
		soln[node] = 0;
	else
		soln[node] = soln[stk[stk[0] - wh[node]]] + 1;
	
	for (int i = 0; i < g[node].size(); ++i)
		dfs(g[node][i]);
	--stk[0];
}


int main() {
	fin >> n; root = n * (n + 1) / 2;
	for (int i = 1; i <= n; ++i)
		fin >> wh[i];
	
	for (int i = 1; i < n; ++i) {
		int x, y;
		fin >> x >> y;
		root -= y;
		g[x].push_back(y);
	}
	
	dfs(root);
	
	for (int i = 1; i <= n; ++i)
		fout << soln[i] << ' ';
	
	fin.close();
	fout.close();
}