Pagini recente » Cod sursa (job #1695441) | Cod sursa (job #3121733) | Cod sursa (job #2240398) | Cod sursa (job #2764851) | Cod sursa (job #2777694)
#include <fstream>
#include <vector>
std::ifstream in("cerere.in");
std::ofstream out("cerere.out");
constexpr int N = 1e5 + 1;
int g[N];
int v[N];
int mem[N];
int dfs(int node) {
if (!v[node]) {
return 0;
}
if (mem[node]) {
return mem[node];
}
int x = node;
for (int i = 0; i < v[node]; ++i) {
x = g[x];
}
return (mem[node] = 1 + dfs(x));
}
int main() {
int n;
in >> n;
for (int i = 1; i <= n; ++i) {
in >> v[i];
}
for (int i = 1; i < n; ++i) {
int a, b;
in >> a >> b;
g[b] = a;
}
for (int i = 1; i <= n; ++i) {
out << dfs(i) << ' ';
}
out << '\n';
}