Cod sursa(job #2285551)

Utilizator skoda888Alexandru Robert skoda888 Data 18 noiembrie 2018 18:46:14
Problema Cerere Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb

#include <iostream>
#include <fstream>
#include <vector>

std::vector<long> sol_tmp;

void DFS(int rad, std::vector<long> Graf[], int K[], int solutie[]){
    sol_tmp.push_back(rad);
    if(K[rad] != 0){
        solutie[rad] = 1 + solutie[sol_tmp[sol_tmp.size() - 1 - K[rad]]];
    }

    for(int i = 0; i < Graf[rad].size(); ++i){
        DFS(Graf[rad][i], Graf, K, solutie);
    }
    sol_tmp.pop_back();
}

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

    long N;
    in >> N;

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

    int tata, fiu;
    bool are_tata[N + 1] = {};
    std::vector<long> Graf[N + 1];
    while(in >> tata >> fiu){
        Graf[tata].push_back(fiu);
        are_tata[fiu] = true;
    }

    int solutie[N + 1] = {};
    for(int i = 1; i <= N; ++i){
        if(are_tata[i] == false){
            DFS(i, Graf, K, solutie);
            break;
        }
    }

    for(int i = 1; i <= N; ++i){
        out << solutie[i] << ' ';
    }
    return 0;
}