Cod sursa(job #3368802)

Utilizator AndreiCiureaCiurea Andrei AndreiCiurea Data 15 octombrie 2026 20:57:37
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int sef[200005];

int sef_suprem(int nod)
{
    if(sef[nod]==nod)
    {
        return nod;
    }
    return sef[nod]=sef_suprem(sef[nod]);
}

struct mch
{
    int x;
    int y;
    int c;
    bool operator<(const mch& alt) const
    {
        return c<alt.c;
    }
};
struct r
{
    int x;
    int y;
};

mch v[400005];
r rez[400005];

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

    int n,m;
    fin>>n>>m;

    for(int i=1;i<=m;i++)
    {
        fin>>v[i].x>>v[i].y>>v[i].c;
    }
    sort(v+1,v+m+1);
    for(int i=1;i<=n;i++)
    {
        sef[i]=i;
    }
    int s=0;
    int k=0;
    for(int i=1;i<=m;i++)
    {
        int sefx=sef_suprem(v[i].x);
        int sefy=sef_suprem(v[i].y);
        if(sefx!=sefy)
        {
            sef[sefx]=sefy;
            s+=v[i].c;
            k++;
            rez[k].x=v[i].x;
            rez[k].y=v[i].y;
        }
    }
    fout<<s<<'\n'<<k<<'\n';
    for(int i=1;i<=k;i++)
    {
        fout<<rez[i].x<<" "<<rez[i].y<<'\n';
    }


    fin.close();
    fout.close();
    return 0;
}