Cod sursa(job #2699194)

Utilizator Stefan_DomuncoStefan Domunco Stefan_Domunco Data 23 ianuarie 2021 20:14:08
Problema Arbore partial de cost minim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
///Kruskal
#include <bits/stdc++.h>
#define MMAX 400005
using namespace std;

///first nod
///second cost
struct muchie{
    int nod1, nod2, cost;
};

vector <muchie> w, wsol;
int rad[MMAX];

bool comp(muchie A, muchie B){
    return A.cost < B.cost;
}

int radacina(int nod){

    if(rad[nod] == nod) return nod;

    return radacina(rad[nod]);
}

void unesc(int nod1, int nod2){
    rad[radacina(nod1)] = radacina(nod2);
}

int main()
{
    ifstream fin("apm.in");
    ofstream fout("apm.out");
    int n, m, i, j;
    int sol = 0;
    fin >> n >> m;
    while(m){
        --m;
        muchie var;
        fin >> var.nod1 >> var.nod2 >> var.cost;
        w.push_back(var);
    }

    for(i = 1; i <= n; ++i) rad[i] = i;

    sort(w.begin(), w.end(), comp);

    for(i = 0; i < w.size(); ++i){

        if(radacina(w[i].nod1) != radacina(w[i].nod2)){
            unesc(w[i].nod1, w[i].nod2);
            sol += w[i].cost;
            wsol.push_back(w[i]);
        }

    }

    fout << sol << '\n' << wsol.size() << '\n';
    for(i = 0; i < wsol.size(); ++i){
        fout << wsol[i].nod1 << ' ' << wsol[i].nod2 << '\n';
    }

    return 0;
}