Uputstvo
To je upravo MST. Primov algoritam iz lekcije; ako na kraju u stablu nije svih n zgrada, graf nije povezan.
Rešenje (C++)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<pair<int, int>>> graf(n + 1);
for (int i = 0; i < m; i++) {
int u, v, c;
cin >> u >> v >> c;
graf[u].push_back({v, c});
graf[v].push_back({u, c});
}
vector<bool> u_st(n + 1, false);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.push({0, 1});
long long cena = 0;
int br = 0;
while (!pq.empty()) {
auto [c, v] = pq.top();
pq.pop();
if (u_st[v]) continue;
u_st[v] = true;
cena += c;
br++;
for (auto [x, w] : graf[v]) if (!u_st[x]) pq.push({w, x});
}
if (br < n) cout << "NEMOGUCE" << endl;
else cout << cena << endl;
return 0;
}