Cod sursa(job #2207440)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 25 mai 2018 18:17:10
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
///     kruskal
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

const int N = 200005;

vector<pair<int, pair<int, int>>> muchii;
vector<pair<int,int>> apm;
int n, m, i, sum;
int t[N];

int rad(int x)
{
    if(t[x] == 0)
        return x;
    t[x] = rad(t[x]);
    return t[x];
}
void uneste(int x, int y)
{
    t[rad(x)] = rad(y);
}

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

    ///citire
    fin>>n>>m;
    muchii.resize(m);
    for(i=0;i<m;i++)
    {
        int x,y,l;
        fin>>x>>y>>l;
        muchii[i] = {l, {x, y}};
    }

    ///kruskal
    sort(muchii.begin(), muchii.end());
    for(auto m : muchii)
    {
        int x, y, l;
        x = m.second.first;
        y = m.second.second;
        l = m.first;

        if(rad(x) != rad(y))
        {
            uneste(x,y);
            apm.push_back({x,y});
            sum += l;
        }
    }

    ///afisare
    fout<<sum<<'\n'<<n-1<<'\n';
    for(auto m : apm)
        fout<<m.first<<' '<<m.second<<'\n';


    return 0;
}