Cod sursa(job #2979602)

Utilizator AndreiBadAndrei Badulescu AndreiBad Data 15 februarie 2023 16:58:18
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
//
//  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;
}