Cod sursa(job #2615785)

Utilizator KPP17Popescu Paul KPP17 Data 15 mai 2020 15:29:45
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#define submit
#ifdef submit
    #define fisier "apm"
#else
    #define fisier "ULTRA"
#endif

#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");

#include <vector>
std::vector<std::pair<int, int>> vecini[200000];
int n;

#include <algorithm>

int main()
{
    int m;
    in >> n >> m;

    while (m--)
    {
        int a, b, c;
        in >> a >> b >> c;
        a--; b--;

        vecini[a].push_back({b, c});
        vecini[b].push_back({a, c});
    }

    std::vector<int> vizitati = {0};
    std::vector<std::pair<int, int>> muchii;
    int cost = 0;

    while (vizitati.size() < n)
    {
        std::pair<int, int>
        min_vecin = vecini[vizitati[0]][0],
        min_muchie = {0, min_vecin.first};

        int min_sursa = 0;

        for (int nod: vizitati)
        {
            for (auto vecin: vecini[nod])
            {
                if (vecin.second < min_vecin.second && std::find(vizitati.begin(), vizitati.end(), vecin.first) == vizitati.end())
                {
                    min_vecin = vecin;
                    min_muchie = {nod, min_vecin.first};
                }
            }
        }

        vizitati.push_back(min_vecin.first);
        muchii.push_back(min_muchie);
        cost += min_vecin.second;
    }

    out
    << cost << '\n'
    << n - 1 << '\n';

    for (auto muchie: muchii)
        out << muchie.first+1 << ' ' << muchie.second+1 << '\n';

}