Cod sursa(job #3368716)

Utilizator marctudor_ghenceaMarc-Tudor Ghencea marctudor_ghencea Data 15 octombrie 2026 13:30:56
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("apm.in");
ofstream cout("apm.out");

int par[200001];

struct muchie{
    int x, y, cost;

    bool operator<(const muchie& b) const {
        return cost < b.cost;
    }
};

vector<muchie> muchii;
vector<muchie> rez;

int sef(int x){
    if(par[x] == x){
        return x;
    }
    else{
        return par[x] = sef(par[x]);
    }
}

void join(int x, int y){
    int parx = sef(x);
    int pary = sef(y);

    par[parx] = pary;
}

int main()
{
    int n, muc;
    cin >> n >> muc;
    for(int i = 1; i <= n; i++){
        par[i] = i;
    }

    for(int i = 1; i <= muc; i++){
        int x, y, c;
        cin >> x >> y >> c;
        muchii.push_back({x, y, c});
    }

    sort(muchii.begin(), muchii.end());

    int s = 0;
    for(auto m : muchii){
        if(sef(m.x) != sef(m.y)){
            join(m.x, m.y);
            s += m.cost;
            rez.push_back(m);
        }
    }

    cout << s << "\n";
    cout << rez.size() << "\n";
    for(auto m : rez){
        cout << m.x << " " << m.y << "\n";
    }
    return 0;
}