Cod sursa(job #3361877)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 29 iulie 2026 12:08:53
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5;
int k[MAXN + 1] , stm[MAXN + 1] , ans[MAXN + 1] , dims;
vector < int > vec[MAXN + 1];
bitset < MAXN + 1 > vfb , vzn;
void dfs ( int nod ) {
    vzn[nod] = 1;
    dims++;
    stm[dims] = nod;
    if ( k[nod] != 0 )
        ans[nod] = ans[stm[dims - k[nod]]] + 1;
    int i;

    for ( i = 0 ; i < vec[nod].size () ; i++ )
        if ( vzn[vec[nod][i]] == 0 )
            dfs ( vec[nod][i] );
    dims--; // scoatem nr din coada
}
int main () {
    ifstream fin ( "cerere.in" );
    ofstream fout ( "cerere.out" );
    int n , i , a , b;

    fin >> n;
    for ( i = 1 ; i <= n ; i++ )
        fin >> k[i];
    for ( i = 1 ; i < n ; i++ ) {
        fin >> a >> b;
        vec[a].push_back ( b );
        vfb[b] = 1;
    }
    i = 1;
    while ( vfb[i] == 1 )
        i++;
    dims = 0;
    dfs ( i );
    for ( i = 1 ; i <= n ; i++ )
        fout << ans[i] << ' ';
    fout.put ( '\n' );
    return 0;
}