Cod sursa(job #1650112)

Utilizator killlerr1Chilom Mircea killlerr1 Data 11 martie 2016 16:38:32
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
using namespace std;

ifstream is("apm.in");
ofstream os("apm.out");

struct line{
    int x, y, w;
};

line e[1000]; // sir de muchii
line apm[100];

int comp[100];
int m, n, costAPM;

void Read();
void Sort();
void Kruskal();
void Write();

int main()
{
    Read();
    Kruskal();

    is.close();
    os.close();
    return 0;
}

void Read()
{
    is >> n >> m;
    int a, b, c;
    for( int i = 1; i <= m; ++i )
    {
        is >> a >> b >> c;
        e[i].x = a;
        e[i].y = b;
        e[i].w = c;
    }
}

void Sort()
{
    line aux;

    for( int i = 1; i <= n; ++i )
        for( int j = i + 1; j <= n; ++j )
            if( e[i].w > e[j].w )
            {
                aux = e[i];
                e[i] = e[j];
                e[j] = aux;
            }
}

void Kruskal()
{
    Sort();

    for( int i = 1; i <= n; ++i )
        comp[i] = i;
    int k = 0;
    for( int i = 1; i <= m; ++i )
    {
        int x = e[i].x, y = e[i].y;
        if( comp[x] != comp[y] )
        {
            apm[++k] = e[i];
            costAPM += e[i].w;
            for( int j = 1; j <= n; ++j )
                if( comp[j] == comp[y] )
                    comp[j] = comp[x];
            if( k == n - 1 ) // am terminat de construit apm-ul
                break;
        }
    }


    Write();
}


void Write()
{
    os << costAPM << '\n';
    for( int i = 1; i < n; ++i )
        os << apm[i].x << ' ' << apm[i].y << ' ' << apm[i].w << '\n';

}