Cod sursa(job #2115900)

Utilizator HoriaDruliacHoria Druliac HoriaDruliac Data 27 ianuarie 2018 11:17:14
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

const int MAXN =200041;
const int MAXM =400050;

int n,m;
int parent[MAXN];

typedef struct Muchie
{
    int x,y,cost;
};
Muchie muchii[MAXM];
int cmp(const Muchie &e, const Muchie &f)
{
    return e.cost < f.cost;
}
vector<Muchie> sol;
int suma;
void citire()
{
    fin>>n>>m;
    for(int i=0; i<m; i++)
        fin>>muchii[i].x>>muchii[i].y>>muchii[i].cost;
}
int getRoot(int nod)
{
    if(nod==parent[nod])
        return nod;
    return (parent[nod] = getRoot(parent[nod]));
}
bool areUnited(int e,int f)
{
    return getRoot(e) == getRoot(f);
}
void unite(int e, int f)
{
    parent[getRoot(e)] = getRoot(f);
}
int main()
{
    citire();
    for(int i=1; i<=n; i++)
        parent[i]=i;
    sort(muchii, muchii+m,cmp);
    for(int i=0; i<m; i++)
        if(!areUnited(muchii[i].x,muchii[i].y))
        {
            unite(muchii[i].x,muchii[i].y);
            sol.push_back(muchii[i]);
            suma += muchii[i].cost;
        }
    fout<<suma<<"\n";
    fout<<sol.size()<<"\n";
    for(Muchie muchie:sol)
        fout<<muchie.y<<" "<<muchie.x<<"\n";
    return 0;
}