Cod sursa(job #3351160)

Utilizator slol003Rizea Alexandru-Gabriel slol003 Data 17 aprilie 2026 12:28:23
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
#define cin fin
#define cout fout

const int NMAX = 1e5 + 5;
vector<int> mat[NMAX];
int a[NMAX];
int v[NMAX];
int sol[NMAX];
void dfs(int nod, int h){
    if (v[nod] == 0) sol[nod] = 0;
    else
        sol[nod] = sol[a[h - v[nod]]] + 1;
    a[h] = nod;
    for (auto i : mat[nod]){
        dfs(i, h + 1);
    }
}
vector<bool> isRad(NMAX, true);

int main(){
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++ i){
        cin >> v[i];
    }

    for (int i  = 1, x, y; i < n; ++ i){
        cin >> x >> y;
        mat[x].push_back(y);
        isRad[y] = false;
    }for (int i = 1;  i<= n; ++ i){
        if (isRad[i] == true){
            dfs(i, 0);
        }
    }
    for (int i = 1; i <= n; ++ i){
        cout << sol[i] << ' ';
    }

    return 0;
}