Cod sursa(job #3277874)

Utilizator PetrudpPetru Paun Petrudp Data 17 februarie 2025 18:25:35
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <vector>

using namespace std;

int dfs(int crt, int poz, vector<vector<int>> fii, vector<int> val, vector<int> &sol, vector<int> &recon)
{
    recon[poz] = crt;
    if (val[crt] == 0)
    {
        sol[crt] = 0;
    }
    else
    {
        sol[crt] = 1 + sol[recon[poz - val[crt]]];
    }
    for (auto y : fii[crt])
    {
        dfs(y, poz + 1, fii, val, sol, recon);
    }
}

int main()
{
    ifstream in ("cerere.in");
    ofstream out("cerere.out");

    int n;
    in >> n;
    vector<int> val(n + 1), sol(n + 1), recon(n + 1);
    vector<vector<int>> fii(n + 1);
    vector<bool> rad(n + 1, true);

    for (int i = 1; i <= n; i++)
    {
        in >> val[i];
    }

    for (int i = 0; i < n; i++)
    {
        int x, y;
        in >> x >> y;
        fii[x].push_back(y);
        rad[y] = false;
    }

    for (int i = 1; i <= n; i++)
    {
        if (rad[i])
        {
            dfs(i, 0, fii, val, sol, recon);
            break;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        out << sol[i] << " ";
    }

    in.close();
    out.close();
    return 0;
}