Cod sursa(job #2963301)

Utilizator rastervcrastervc rastervc Data 10 ianuarie 2023 19:47:20
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

constexpr size_t LIM = 1e5 + 1;

int N, i, node1, node2, K[LIM], father[LIM];
int id[LIM], ans[LIM];
vector<int> adj_list[LIM];
bool not_root[LIM];

static void dfs(int node, int level) {
    id[level] = node;
    if (K[node] == 0) ans[node] = 0;
    else ans[node] = ans[id[level - K[node]]] + 1;
    for (const int adj : adj_list[node])
        dfs(adj, level + 1);
}

int main() {
    fin >> N;
    for (i = 1; i <= N; ++i)
        fin >> K[i];

    for (i = 1; i <= N; ++i) {
        fin >> node1 >> node2;
        adj_list[node1].push_back(node2);
        not_root[node2] = true;
    }

    int root = 0;
    for (i = 1; i <= N && !root; ++i)
        if (!not_root[i]) root = i;

    dfs(root, 1);

    for (i = 1; i <= N; ++i)
        fout << ans[i] << ' ';

    fin.close();
    fout.close();
    return 0;
}