Cod sursa(job #2370413)

Utilizator lupulescu2001Lupulescu Vlad lupulescu2001 Data 6 martie 2019 12:03:38
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

const int nMax = 200000;
int x[nMax + 5], y[nMax + 5];
pair<int, int> p[nMax + 5];
vector<int> ans;
int r[nMax + 5];
int n, m;

int Radacina(int nod) {
    if (r[nod] == 0)
        return nod;
    r[nod] = Radacina(r[nod]);
    return r[nod];
}

void Unire(int a, int b) {
    r[a] = b;
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int z;
        fin >> x[i] >> y[i] >> z;
        p[i] = {z, i};
    }
    sort(p + 1, p + 1 + m);
    int sol = 0;
    for (int i = 1; i <= m; i++){
        int rx = Radacina(x[p[i].second]);
        int ry = Radacina(y[p[i].second]);
        if (rx != ry) {
            Unire(rx, ry);
            ans.push_back(p[i].second);
            sol += p[i].first;
        }
    }
    fout << sol << '\n';
    fout << n - 1 << '\n';
    for (auto i : ans)
        fout << x[i] << " " << y[i] << '\n';
    return 0;
}