Cod sursa(job #2955431)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 16 decembrie 2022 22:56:14
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;

int t[100003];
vector<int> graf[100003];
int uwu[100003];
int dp[100003];
int a[100003];
void dfs(int nod, int level){
    uwu[level] = nod;
    if(a[nod] == 0){
        dp[nod] = 0;
    }else{
        dp[nod] = dp[uwu[level - a[nod]]] + 1;
    }
    for(auto nodut: graf[nod]){
        dfs(nodut,level+1);
    }
}

int main(void){
    ofstream cout("cerere.out");
    ifstream cin("cerere.in");
    int n;
    cin >> n;
    for(int i = 1;i<=n;i++){
        cin >> a[i];
    }
    for(int i = 1;i<n;i++){
        int x, y;
        cin >> x >> y;
        graf[x].push_back(y);
        t[y] = x;
    }
    int rizz = 0;
    for(int i = 1;i<=n;i++){
        if(t[i] == 0){
            /// nu are un tata (deci este radacina)
            rizz = i;
            break;
        }
    }
    /// parcurgem aroborele din radacina in jos
    dfs(rizz,1);
    for(int i = 1;i<=n;i++)cout << dp[i] << ' ';

}