Cod sursa(job #3365678)

Utilizator Iustin_Mircea2010Iustin Mircea Iustin_Mircea2010 Data 23 septembrie 2026 10:01:31
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

int nodes[100005], ans[100005], pas[100005], par[100005];
int sz = 0;
vector<int> adj[100005];

void dfs(int i){
    nodes[++sz] = i;
    if(pas[i])
        ans[i] = ans[nodes[sz - pas[i]]] + 1;
    for(int j : adj[i])
        dfs(j);
    sz--;
}

int main(){
    
    ifstream cin("cerere.in");
    ofstream cout("cerere.out");
    
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> pas[i];
    }
    int root = 0;
    for(int i = 1; i < n; i++){
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        par[v] = u;
    }
    for(int i = 1; i <= n; i++){
        if(par[i] == 0) root = i;
    }
    dfs(root);
    for(int i = 1; i <= n; i++) cout << ans[i] << ' ';
    return 0;
}