Cod sursa(job #2504275)

Utilizator NastureNasture Anca Nasture Data 4 decembrie 2019 19:20:08
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include<algorithm>

using namespace std;

ifstream cin("apm.in");
ofstream cout("apm.out");
struct ura{
    int nod1,nod2, cost, luat;
};

ura v[400001];
int tata[200001];

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




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

}
void uneste(int x, int y)
{
    int sefx=sef(x);
    int sefy=sef(y);
    tata[sefy]=sefx;

}

int main()
{
    int n,m, i,pp,s;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        tata[i]=i;
    for(i=1;i<=m;i++)
        cin>>v[i].nod1>>v[i].nod2>>v[i].cost;
    sort(v+1,v+m+1,cmp);
    pp=n-1;
    i=1;
    s=0;
    while(pp!=0)
    {
        if(sef(v[i].nod1)!=sef(v[i].nod2))
        {
            pp--;
            uneste(v[i].nod1,v[i].nod2);
            v[i].luat=1;
            s+=v[i].cost;
        }
        i++;
    }
    cout<<s<<'\n'<<n-1<<'\n';
    for(i=1;i<=m;i++)
        if(v[i].luat==1)
            cout<<v[i].nod1<<" "<<v[i].nod2<<'\n';
    return 0;
}