Cod sursa(job #2717815)

Utilizator DavidTosaDavid Tosa DavidTosa Data 7 martie 2021 23:03:19
Problema Arbore partial de cost minim Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");

struct muchie{
    int x,y,c;
};
vector<muchie> m, v;
int n,nrm,s,rx,ry,t[110],i,j,cnt,k;

void citire()
{
    int i;
    muchie muc;

    fin>>n>>nrm;
    for(i=0; i<nrm; i++)
    {
        fin>>muc.x>>muc.y>>muc.c;
        m.push_back(muc);
    }
}

int radacina(int k)
{
    if(t[k]==k)
        return k;
    else
    {
        int r=radacina(t[k]);
        t[k]=r;
        return r;
    }
}

bool comp(muchie x, muchie y)
{
    return (x.c < y.c);
}

int main()
{
    citire();
    sort(m.begin(), m.end(), comp);

    for(i=1;i<=n;i++)
        t[i] = i;

    s=cnt=0;
    for(i=0; i<nrm && cnt<n; i++)
    {
        rx=radacina(m[i].x);
        ry=radacina(m[i].y);
        if(rx!=ry)
        {
            s+=m[i].c;
            k++;
            v.push_back(m[i]);
            t[rx]=ry;
        }
    }

    fout<<s<<'\n'<<k<<'\n';
    for(auto muc : v)
    {
        fout<<muc.x<<" "<<muc.y<<'\n';
    }
    return 0;
}