Cod sursa(job #1911437)

Utilizator Alexandru07Tomescu Ilie Alexandru Alexandru07 Data 7 martie 2017 20:27:11
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;

struct muchie
{
    int x,y,c;
}G[1001],sol[1001];

int i,n,m,C[1001],j,k,ct,n1,n2;

ifstream f("kruskal.in");
ofstream g("kruskal.out");

int main()
{
    f >> n >> m;
    for(i=1;i<=m;i++)
        f>>G[i].x>>G[i].y>>G[i].c;
    //initializez - consider ca fiecare varf al grafului face parte dintr-o comp. conexa
    for(i=1;i<=n;i++)
        C[i] = i;
    ///sortam crescator dupa cost muchiile
    for(i=1;i<m; i++)
        for(j=i+1; j<=m; j++)
        if (G[i].c> G[j].c){
            swap(G[i], G[j]);
        }

    ///Kruskal
    k=0;
    i=1;
    ct = 0;
    while(k<n-1){
        if (C[G[i].x] != C[G[i].y]){
            k++;
            ct += G[i].c;
            sol[k]=G[i];
            ///unificam comp. conexe a celor 2 varfuri
            n1=C[G[i].x];
            n2=C[G[i].y];
            for(j=1;j<=n;j++)
                if (C[j] == n2) C[j] = n1;
        }
        i++;
    }
    g<<ct << endl;
    for(i=1;i<=k;i++)
        g << sol[i].x << " " << sol[i].y <<  endl;
    return 0;
}