Cod sursa(job #2371345)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 6 martie 2019 17:16:18
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>
#define nmax 200100
using namespace std;
ifstream f ("apm.in");
ofstream g ("apm.out");
struct usor
{
    int a,b,c;
}v[nmax];
int usu[nmax],n,m,sol,afis[nmax],nr;
bool cmp(usor a,usor b)
{
    return a.c<b.c;
}
int gr(int nod)
{
    if(usu[nod]==nod) return nod;
    usu[nod]=gr(usu[nod]);
    return usu[nod];
}
void unite(int a,int b)
{
    usu[gr(a)]=gr(b);
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;++i) f>>v[i].a>>v[i].b>>v[i].c;
    sort(v+1,v+m+1,cmp);
    for(int i=1;i<=n;++i) usu[i]=i;
    for(int i=1;i<=m;++i)
    {
        if(gr(v[i].a)!=gr(v[i].b))
        {
            sol+=v[i].c;
            unite(v[i].a,v[i].b);
            afis[++nr]=i;
        }
    }
    g<<sol<<'\n'<<n-1<<'\n';
    for(int i=1;i<n;++i) g<<v[afis[i]].a<<' '<<v[afis[i]].b<<'\n';
    return 0;
}