Cod sursa(job #2708266)

Utilizator STEFAN18Miclaus Stefan STEFAN18 Data 18 februarie 2021 15:02:44
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int n,m,sef[200001];
struct apm{int x,y,c;};
apm v[400001];

bool cmp(apm a, apm b)
{
    if(a.c<b.c)
    {
        return true;
    }
    return false;
}

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

int main()
{
    int i,ct=0,sef1,sef2,s=0;
    cin>>n>>m;
    for(i=1;i<=m;i++)
    {
        sef[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        cin>>v[i].x>>v[i].y>>v[i].c;
    }
    sort(v+1,v+1+m,cmp);
    i=1;
    while(ct<n-1)
    {
        sef1=sefsuprem(v[i].x);
        sef2=sefsuprem(v[i].y);
        if(sef1!=sef2)
        {
            sef[sef2]=sef1;
            s+=v[i].c;
            ct++;
            v[ct]=v[i];
        }
        i++;
    }
    cout<<s<<"\n"<<n-1<<"\n";
    for(i=1;i<n;i++)
    {
        cout<<v[i].x<<" "<<v[i].y<<"\n";
    }

    return 0;
}