Cod sursa(job #2998648)

Utilizator DevilonnetPescar Denis Devilonnet Data 9 martie 2023 19:47:15
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include<algorithm>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
int sum,C[200000],l;
int n,m;
struct muchie
{
    int x,y,c;
}muchii[200000],rez[200000];

int comp(muchie a,muchie b)
{
    return a.c<b.c;
}
int find(int nod)
{
    if(nod==C[nod])
        return nod;
    return C[nod]=find(C[nod]);
}

void unesc(int nod1,int nod2)
{
    if(C[nod1]<C[nod2])
        C[nod2]=C[nod1];
    else
        C[nod1]=C[nod2];
}
void kruskal()
{
    for(int i=1;i<=m;++i)
        {
            int c1=find(muchii[i].x);
            int c2=find(muchii[i].y);
            if(c1!=c2)
            {
                unesc(c1,c2);
                sum+=muchii[i].c;
                rez[++l]=muchii[i];

            }
        }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;++i)
        cin>>muchii[i].x>>muchii[i].y>>muchii[i].c;
    for(int i=1;i<=n;++i)
        C[i]=i;
    sort(muchii+1,muchii+m+1,comp);
    kruskal();
    cout<<sum<<l<<endl;
    for(int i=1;i<=l;++i)
        cout<<rez[i].x<<" "<<rez[i].y<<endl;
    
}