Cod sursa(job #2955343)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 16 decembrie 2022 19:27:28
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int DIM = 100010;
int n, x, y, root;
int k[DIM], father[DIM], sol[DIM], l[DIM];
vector<int> v[DIM];

void dfs(int node, int lvl) {
    l[lvl] = node;
    if (k[node] == 0)
        sol[node] = 0;
    else
        sol[node] = sol[l[lvl - k[node]]] + 1;

    for (int i = 0; i < v[node].size(); i++)
        dfs(v[node][i], lvl + 1);
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> k[i];
    for (int i = 1; i < n; i++) {
        fin >> x >> y;
        v[x].push_back(y);
        father[y] = x;
    }

    for (int i = 1; i <= n; i++) {
        if (father[i] == 0) {
            root = i;
            break;
        }
    }

    dfs(root, 1);

    for (int i = 1; i <= n; i++)
        fout << sol[i] << ' ';

    return 0;
}