Cod sursa(job #933091)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 29 martie 2013 16:43:08
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<vector>
#include<fstream>
using namespace std;

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

const int N = 110000;

int n, k[N], s[N], g[N], nr, d[N];
vector<int> v[N];

void df(int nod) {
	s[++nr] = nod;
	if(k[nod])
		d[nod] = d[s[nr - k[nod]]] + 1;
	
	for(vector<int>::iterator it = v[nod].begin(); it != v[nod].end(); ++it)
		df(*it);
	--nr;
}

int main() {
	int i;
	
	cin >> n ;
	
	for(i = 1; i <= n; ++i)
		cin >> k[i];
	
	for(i = 1; i < n;++i) {
		int a, b;
		cin >> a >> b;
		g[b]++;
		v[a].push_back(b);
	}
	int r;
	for(i = 1; i <= n; ++i) if(!g[i])
		r = i;
	df(r);
	
	for(i = 1; i <= n; ++i)
		cout << d[i] << " ";
	
	return 0;
}