Cod sursa(job #1987135)

Utilizator lflorin29Florin Laiu lflorin29 Data 29 mai 2017 20:46:09
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 1e5 + 2;
int n, root, in[Nmax], k[Nmax], dp[Nmax];
vector<int>g[Nmax];
vector<int>st;
void DFS(int node) {
	st.push_back(node);
	if(!k[node]) dp[node] = 0;
	else
	dp[node] = dp[st[st.size() - 1 - k[node]]] + 1;

	for (auto i : g[node]) {
		DFS(i);
	}

	st.pop_back();
}
int main() {
	ifstream cin("cerere.in");
	ofstream cout("cerere.out");
	cin >> n;

	for (int i = 1; i <= n; ++i) {
		cin >> k[i];
	}

	for (int i = 1; i < n; ++i) {
		int a, b;
		cin >> a >> b;
		g[a].push_back(b);
		++in[b];
	}

	for (int i = 1; i <= n; ++i)
		if (!in[i]) root = i;

	DFS(root);

	for (int i = 1; i <= n; ++i) {
		cout << dp[i] << ' ';
	}

	return 0;
}