Cod sursa(job #2916650)

Utilizator Iordache_CezarIordache Cezar Iordache_Cezar Data 31 iulie 2022 10:26:53
Problema Cerere Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define NMAX 100008

using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");

int_fast32_t n, root, dp[NMAX], c[NMAX], tata[NMAX], lvl[NMAX];
vector <int_fast32_t> G[NMAX];

void DFS(int_fast32_t nod, int_fast32_t nivel);

int main()
{
    int_fast32_t a, b;
    fin >> n;
    for (int_fast32_t i = 1; i <= n; i++)
        fin >> c[i];
    for (int_fast32_t i = 1; i < n; i++)
    {
        fin >> a >> b;
        G[a].push_back(b);
        tata[b] = a;
    }

    for (int_fast32_t i = 1; i <= n; i++)
        if (tata[i] == 0)
        {
            root = i;
            break;
        }
    DFS(root, 0);
    for (int_fast32_t i = 1; i <= n; i++)
        fout << dp[i] << ' ';
    return 0;
}

void DFS(int_fast32_t nod, int_fast32_t nivel)
{
    lvl[nivel] = nod;
    if (c[nod])
        dp[nod] =  1 + dp[lvl[nivel-c[nod]]];
    for (auto vf : G[nod])
        DFS(vf, nivel+1);
}