Pagini recente » Cod sursa (job #2577384) | Cod sursa (job #470154) | Cod sursa (job #2924553) | Cod sursa (job #24273) | Cod sursa (job #2979577)
//
// main.cpp
// Cerere (infoarena)
//
// Created by Andrei Bădulescu on 15.02.23.
//
//#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
const int N = 100000;
bitset <N + 1> visited;
int cost[N + 1];
int master[N + 1];
int difficulty[N + 1];
int n;
int jumpFrom(int current) {
int remaining = difficulty[current];
while (remaining--) {
current = master[current];
}
return current;
}
int ancestorCost(int node) {
if (visited[node]) {
return 0;
}
if (!difficulty[node]) {
visited[node] = true;
return 0;
}
return ancestorCost(jumpFrom(node)) + 1;
}
int main() {
cin >> n;
for (auto i = 1; i <= n; i++) {
cin >> difficulty[i];
}
for (auto i = 1; i < n; i++) {
int x, y;
cin >> x >> y;
master[y] = x;
}
for (auto i = 1; i <= n; i++) {
cost[i] = 0;
}
visited[0] = 0;
for (auto i = 1; i <= n; i++) {
cost[i] = ancestorCost(i);
}
for (auto i = 1; i <= n; i++) {
cout << cost[i] << ' ';
}
return 0;
}