Cod sursa(job #2923470)

Utilizator bem.andreiIceman bem.andrei Data 14 septembrie 2022 15:53:35
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;
ifstream r("cerere.in");
ofstream w("cerere.out");
int n, aux, k[100003], t[100003], s[100003], sol[100003];
vector<int> l[100003];
void dfs(int nod,int niv) {
    s[niv]=nod;
    if (k[nod]==0){
        sol[nod]=0;
    }
    else{
        sol[nod]=1+sol[s[niv-k[nod]]];
    }
    for (int i=0;i<l[nod].size();i++){
        dfs(l[nod][i],niv+1);
    }
}

int main() {
    r>>n;
    for (int i=1;i<=n;i++){
        r>>k[i];
    }
    for (int i=1;i<n;i++) {
        int x, y;
        r>>x>>y;
        l[x].push_back(y);
        t[y]=x;
    }
    for (int i=1;i<=n;i++){
        if (t[i]==0) {
            aux=i;
            break;
        }
    }
    dfs(aux,1);
    for (int i=1;i<=n;i++){
        w<<sol[i]<<" ";
    }
    return 0;
}