Cod sursa(job #3352237)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 25 aprilie 2026 12:54:39
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");

const int Nmax = 1e5 + 5;
vector <int> vecini[Nmax];
int k[Nmax], ans[Nmax], nivel[Nmax];
void dfs(int nod, int tata, int lvl )
{
    nivel[lvl] = nod;
    ans[nod] = ans[ nivel[  lvl - k[nod]  ] ] + 1;
    for ( int vecin : vecini[nod] )
    {
        if ( vecin == tata )
            continue;

        dfs( vecin, nod, lvl + 1);
    }
}
int main()
{
    int n, i;
    fin >> n;
    for ( i = 1; i <= n; ++i )
        fin >> k[i];

    for ( i = 1; i <= n; ++i )
    {
        int a, b;
        fin >> a >> b;
        vecini[a].push_back(b);
        vecini[b].push_back(a);

    }

    dfs(1, -1, 1);

    for ( i = 1; i <= n; ++i )
        fout << ans[i] - 1 << " ";
    return 0;
}