Cod sursa(job #3258809)

Utilizator bogdan1479Luca Bogdan Alexandru bogdan1479 Data 23 noiembrie 2024 18:59:17
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

const int NMAX = 2e5 + 1;

struct muchie
{
    int i, j, c;
};

ifstream fin("apm.in");
ofstream fout("apm.out");

int n, m, CC[NMAX], sol;
vector<muchie> M;
vector<int> vsol;

void citire()
{
    int i, j, c;
    fin >> n >> m;
    for(int k = 1; k <= m; ++k)
    {
        fin >> i >> j >> c;
        M.push_back({i, j, c});
    }
}

inline bool cmp(const muchie& a, const muchie& b)
{
    return a.c < b.c;
}

int Find(int x)
{
    if(!CC[x]) return x;
    return CC[x] = Find(CC[x]);
}

void solutie()
{
    sort(M.begin(), M.end(), cmp);
    for(int i = 0, nrm = 0; i < m; ++i)
    {
        int cx = Find(M[i].i), cy = Find(M[i].j);
        if(cx != cy)
        {
            sol += M[i].c;
            vsol.push_back(i);
            CC[cx] = cy;
            if(++nrm == n - 1) return;
        }
    }
}

void afisare()
{
    fout << sol << '\n' << n - 1 << '\n';
    for(const auto& x : vsol)
        fout << M[x].i << ' ' << M[x].j << '\n';
}

int main()
{
    citire();
    solutie();
    afisare();
    return 0;
}