Cod sursa(job #2870477)

Utilizator lildobreVlad Dobrescu lildobre Data 12 martie 2022 13:12:39
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");

int n,m,l,tati[101],cost;

struct muchie
{
    int x,y,c;
} v[100001],sol[101];

void sortare()
{
    for(int i=1; i<m; i++)
        for(int j=i+1; j<=m; j++)
            if(v[i].c > v[j].c)
                swap(v[i],v[j]);
}

void Kruskal()
{
    for(int r=1; r<=n; r++)
        tati[r]=r;
    int k=0,i=1;
    while(k<n-1)
    {
        if(tati[v[i].x]!=tati[v[i].y])
        {
            k++;
            sol[++l].x=v[i].x;
            sol[l].y=v[i].y;
            cost+=v[i].c;
            int nr1=tati[v[i].x],nr2=tati[v[i].y];
            for(int j=1; j<=n; j++)
                if(tati[j]==nr2)
                    tati[j]=nr1;
        }
        i++;
    }
}

int main()
{
    fin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        fin>>v[i].x>>v[i].y>>v[i].c;
    }
    sortare();
    Kruskal();
    fout<<cost<<'\n';
    for(int i=1; i<=l; i++)
        fout<<sol[i].x<<" "<<sol[i].y<<'\n';
    return 0;
}