Cod sursa(job #1315914)

Utilizator Mitsa3Neamt Mihai Mitsa3 Data 13 ianuarie 2015 11:57:27
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;
#define MAX 100000
ifstream fin("apm.in");
ofstream fout("apm.out");
struct tata{
    int x, y, cost;
};

tata a[MAX];
int dad[MAX];
inline bool cmp(tata e, tata f)
{
    return e.cost < f.cost;
}
int sef(int i)
{
    if(dad[i] != i)
        dad[i] = sef(dad[i]);
    return dad[i];
}
int main()
{
    int n, m, rezcost = 0;
    fin >> n >> m;
    for(int i = 1; i<=m; i++)
    {
        fin >>  a[i].x >> a[i].y >> a[i].cost;
    }
    sort(a + 1, a + n + 1, cmp);

    for(int i = 1; i<=n; i++)
        dad[i] = i;
    int j;
    for(int i = 1; i<=n; i++)
    {
        while(dad[a[i].x] != dad[a[i].y])
        {
            rezcost += a[i].cost;
            j = i;
            dad[a[i].x] = dad[a[i].y];
        }
    }
    fout << rezcost << "\n";
    for(int i = 1; i<=j; i++)
        fout << a[i].x << " " << a[i].y << "\n";
    return 0;
}