Cod sursa(job #3362048)

Utilizator RaresPanuPanu Rares RaresPanu Data 1 august 2026 10:12:26
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;

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

int salt[100001];
int rez[100001];
bool padre[100001];
vector <int> stk;

void dfs(int node, vector <vector<int>> &fii) {
    stk.push_back(node);
    if (salt[node]>0) {
        rez[node] = rez[stk[stk.size()-salt[node]-1]]+1;
    }else {
        rez[node] = 0;
    }
    for (int i=0;i<fii[node].size();i++) {
        dfs(fii[node][i],fii);
    }
    stk.pop_back();
}

int main() {
    int n;
    fin >> n;

    vector <vector <int>> fii(n+1);

    for (int i=1;i<=n;i++) {
        fin >> salt[i];
    }
    for (int i=1;i<=n-1;i++) {
        int a,b;
        fin >> a >> b;
        fii[a].push_back(b);
        padre[b]=1;
    }
    int val=0;
    for (int i=1;i<=n;i++) {
        if (padre[i]==0) {
            val=i;
            break;
        }
    }
    dfs(val,fii);
    for (int i=1;i<=n;i++) {
        fout << rez[i] << " ";
    }
    return 0;
}