Cod sursa(job #3319978)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 3 noiembrie 2025 22:55:19
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

int main() {

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

	int n;
	in >> n;

	vector<int> jump(n + 1);
	for(int i = 1; i <= n; i++) { in >> jump[i]; }

	vector<int> deg(n + 1);
	vector<vector<int>> g(n + 1);
	for(int i = 1; i <= n; i++) {
		int x, y;
		in >> x >> y;
		g[x].push_back(y);
		deg[y]++;
	}

	int root;
	for(int i = 1; i <= n; i++) {
		if(!deg[i]) {
			root = i;
			break;
		}
	}

	vector<int> level_node(n + 1), ans(n + 1);
	function<void(int, int)> dfs = [&](int node, int level) -> void {
		level_node[level] = node;
		if(!jump[node]) { ans[node] = 0; }
		else { ans[node] = ans[level_node[level - jump[node]]] + 1; }
		for(int son : g[node]) {  dfs(son, level + 1); }
	};

	dfs(root, 1);

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

	return 0;
}