Загрузка данных


#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    // Множество рёбер: вес -> (вершина u, вершина v)
    set<pair<int, pair<int, int>>> edges;
    for (int i = 0; i < m; ++i) {
        int u, v, w;
        cin >> u >> v >> w;
        edges.insert({w, {u, v}});
    }

    vector<bool> inTree(n + 1, false); // помечает вершины, уже добавленные в остов

    // Берём самое лёгкое ребро как начальное
    auto it = edges.begin();
    int u = it->second.first;
    int v = it->second.second;
    int totalWeight = it->first;
    inTree[u] = inTree[v] = true;
    edges.erase(it);

    // Добавляем оставшиеся n-2 ребра (по алгоритму Прима)
    for (int k = 0; k < n - 2; ++k) {
        for (auto it2 = edges.begin(); it2 != edges.end(); ++it2) {
            int a = it2->second.first;
            int b = it2->second.second;
            if (inTree[a] != inTree[b]) { // соединяет дерево с новой вершиной
                totalWeight += it2->first;
                inTree[a] = inTree[b] = true;
                edges.erase(it2);
                break;
            }
        }
    }

    cout << totalWeight << endl;
    return 0;
}