Cod sursa(job #3003576)

Utilizator oana75Ioana Prunaru oana75 Data 15 martie 2023 20:03:01
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;
const int MMAX = 400001,
          NMAX = 200001;

struct muchie
{
    int x, y, cost;
};

int N, M, T[NMAX], nrm, ct;
muchie m[MMAX], MF[MMAX];

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

inline bool cmp(muchie A, muchie B)
{
    return A.cost < B.cost;
}

void citire()
{
    in >> N >> M;
    for(int i = 1; i <= M; i++)
    {
        int a, b, c;
        in >> a >> b >> c;
        m[i].x = a;
        m[i].y = b;
        m[i].cost = c;
    }
}

int Find(int x)
{
    if(T[x] == 0)
        return x;
    else
        return T[x] = Find(T[x]);
}

void Kruskal()
{
    sort(m + 1, m + 1 + M, cmp);
    for(int i = 1; i <= M; i++)
    {
        int rx, ry;
        rx = Find(m[i].x);
        ry = Find(m[i].y);
        if(rx != ry)
        {
            T[rx] = ry;
            nrm++;
            MF[nrm] = m[i];
            ct += m[i].cost;
        }
    }
}

void afisare()
{
    out << ct << '\n';
    for(int i = 1; i <= nrm; i++)
        out << MF[i].x << " " << MF[i].y << '\n';
}

int main()
{
    citire();
    Kruskal();
    afisare();
    in.close();
    out.close();
    return 0;
}