주어진 간선으로 MST를 구성하고 그 간선내의 가장 큰 간산 하나를 제거하면 정답을 얻을 수 있다
더보기
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct h { int x, y, v; };
bool cmp(h a, h b) { return a.v < b.v; }
int parent[100001];
int findp(int x) { if (parent[x] == x) return x; return parent[x] = findp(parent[x]); }
int main() {
int n, m; cin >> n >> m;
vector<h> arr(m + 1); int totalp = 0;
for (int i = 1; i <= m; i++) {
cin >> arr[i].x >> arr[i].y >> arr[i].v;
totalp += arr[i].v;
}
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
sort(arr.begin(), arr.end(), cmp);
int cv = 0;
int pn = 1;
int sum = 0;
int mx = -2100000000;
while (true) {
int p1 = findp(arr[pn].x);
int p2 = findp(arr[pn].y);
if (p1 != p2) {
sum += arr[pn].v;
mx = mx > arr[pn].v ? mx : arr[pn].v;
cv++;
parent[p2] = p1;
}
if (cv == n - 1) break;
pn++;
}
cout << sum - mx;
return 0;
}
'Algorithm > Algorithm 문제 풀이' 카테고리의 다른 글
[BAE/<JOON> 문제풀이] 1509. 팰린드롬 분할 (0) | 2021.04.17 |
---|---|
[BAE/<JOON> 문제풀이] 20040. 사이클 게임 (0) | 2021.04.17 |
[BAE/<JOON> 문제풀이] 14003. 가장 긴 증가하는 부분 수열 5(풀이 미완) (0) | 2021.04.10 |
[BAE/<JOON> 문제풀이] 9328. 열쇠 (0) | 2021.04.10 |
[BAE/<JOON> 문제풀이] 9466. 텀 프로젝트 (0) | 2021.04.10 |