모든 컴퓨터를 최소 비용으로 연결, 모든 컴퓨터를 연결 할 수 없는 경우는 없다.
모든 정점이 연결되어 있어야 하고 이에 관한 최소비용을 찾기 위해서는 최소 스패닝 트리(MST) 알고리즘을 떠올렸어야 했는데 그러지 못했다.
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
int n, m;
int uf[1000];
int output = 0;
vector<pair<int, pair<int, int>>> v;
int find(int x) {
//자기 자신이 부모이면
if (x == uf[x]) return x;
else return uf[x] = find(uf[x]);
}
void _union(int x, int y) {
x = find(x);
y = find(y);
if (x > y) {
uf[x] = y;
}
else {
uf[y] = x;
}
}
bool sameparent(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return true;
else return false;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
uf[i] = i;
}
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
v.push_back({ c,{a,b} });
}
sort(v.begin(), v.end());
for (int i = 0; i < m; i++) {
//2 3
//4 5
//1 3
if (!sameparent(v[i].second.first, v[i].second.second)){
_union(v[i].second.first, v[i].second.second);
output += v[i].first;
}
}
cout << output;
return 0;
}