Cod sursa(job #3365397)

Utilizator JenJenCristache Ion JenJen Data 20 septembrie 2026 18:58:44
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin ("apm.in");
ofstream cout ("apm.out");

struct Muchie
{
    int u, v, cost;
};

int n, m;
int u, v, c;

int tata[200005];

void init()
{
    for (int i = 1; i <= n; i++)
    {
        tata[i] = i;
    }
}

int dad(int x)
{
    if (tata[x] == x) return x;

    return tata[x] = dad(tata[x]);
}

void unite(int a, int b)
{
    int dada = dad(a);
    int dadb = dad(b);

    if (dada != dadb) tata[ dada ] = dadb;
}

Muchie curent;
int main()
{
    cin >> n >> m;

    init();

    vector <Muchie> muchii(m);
    for (int i = 0; i < m; i++)
    {
        cin >> muchii[i].u >> muchii[i].v >> muchii[i].cost;
    }

    sort(muchii.begin(), muchii.end(), [](const Muchie& a, const Muchie& b) {
         return a.cost < b.cost;
    });

    vector <Muchie> apm;
    int cost_total = 0;

    for (int i = 0; i < m && apm.size() < n - 1; i++)
    {
        curent = {muchii[i].u, muchii[i].v, muchii[i].cost};

        if (dad(muchii[i].u) != dad(muchii[i].v))
        {
            unite(muchii[i].u, muchii[i].v);
            apm.push_back(curent);
            cost_total += muchii[i].cost;
        }
    }

    cout << cost_total << '\n';
    for (int i = 0; i < apm.size(); i++)
    {
        cout << apm[i].u << " " << apm[i].v << '\n';
    }
    return 0;
}