Pagini recente » Cod sursa (job #3124283) | Cod sursa (job #631038) | Cod sursa (job #2158177) | Cod sursa (job #2940003) | Cod sursa (job #2979602)
//
// main.cpp
// Cerere (infoarena)
//
// Created by Andrei Bădulescu on 15.02.23.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
const int N = 100000;
vector <int> edges[N + 1];
vector <int> branch;
int difficulty[N + 1];
int master[N + 1];
int cost[N + 1];
int n;
void rechnung(int node) {
branch.push_back(node);
cost[node] = cost[branch[branch.size() - 1 - difficulty[node]]] + 1;
for (auto next: edges[node]) {
rechnung(next);
}
branch.pop_back();
}
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;
edges[x].push_back(y);
}
int header = 1;
while (master[header]) {
header = master[header];
}
rechnung(header);
for (auto i = 1; i <= n; i++) {
cout << cost[i] - 1 << ' ';
}
return 0;
}