Pagini recente » Cod sursa (job #3347091) | Cod sursa (job #3321096) | Cod sursa (job #3337174) | Cod sursa (job #3330224) | Cod sursa (job #3319978)
#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;
}