Cod sursa(job #2633980)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 9 iulie 2020 14:47:03
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <vector>

using namespace std;

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

void dfs ( int nod );

int n;

int x, y;

int k[100137];

vector < int > v[100137];

int ant[100137];

int sorin[100137];

int viz[100137];

int niv;

int main()
{
    in >> n;
    for ( register int i = 1 ; i <= n ; ++i )
        in >> k[i];
    for ( register int i = 2 ; i <= n ; ++i )
    {
        in >> x >> y;
        v[x].push_back (y);
        ant[y] = 1;
    }
    for ( register int i = 1 ; i <= n ; ++i )
        if ( !ant[i] )
        {
            niv = 1;
            dfs(i);
            for ( register int i = 1 ; i <= n ; ++i )
                out << sorin[i] << " ";
            return 0;
        }
    return 0;
}

void dfs ( int nod )
{
    if ( k[nod] )
        sorin[nod] = sorin[ant[niv - k[nod]]] + 1;
    ant[niv] = nod;
    viz[nod] = 1;
    for ( auto i : v[nod] )
        if ( !viz[i] )
        {
            ++niv;
            dfs(i);
            --niv;
        }
}