Cod sursa(job #2489844)

Utilizator RedXtreme45Catalin RedXtreme45 Data 9 noiembrie 2019 12:14:48
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define Nmax 200001
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,ap[Nmax],val[Nmax],S,nr;
struct NodCost{
    int nod,nod1,cost;
}v[Nmax],sol[Nmax];
int cmp(NodCost a,NodCost b)
{
    return a.cost<b.cost;
}
int stramos(int x){
    if (ap[x]==x)
        return ap[x];
    ap[x]=stramos(ap[x]);
    return ap[x];
}
int main()
{
    int i;
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>v[i].nod>>v[i].nod1>>v[i].cost;
    }
    for (i=1;i<=n;i++){
        ap[i]=i;
        val[i]=1;
    }

    sort (v+1,v+m+1,cmp);
    for (i=1;i<=m;i++)
    {
        int a1=stramos(v[i].nod);
        int b1=stramos(v[i].nod1);
        if (a1!=b1)
        {
            S+=v[i].cost;
            if (val[a1]>=val[b1])
            {
                val[a1]+=val[b1];
                ap[b1]=a1;
            }
            else
            {
                val[b1]+=val[a1];
                ap[a1]=b1;
            }
            nr++;
            sol[nr].nod=v[i].nod;
            sol[nr].nod1=v[i].nod1;
            sol[nr].cost=v[i].cost;
        }
    }
    fout<<S<<"\n"<<nr<<"\n";
    for (i=1;i<=nr;i++)
        fout<<sol[i].nod<<" "<<sol[i].nod1<<"\n";
    return 0;
}