반응형
주어진 각 행성 간의 플로우 관리 비용으로 간선들을 만든 뒤,
크루스칼 알고리즘을 수행하며 최소 유지비용을 구해주었습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, a, p[1000];
long long ans = 0;
vector<vector<int>> edges;
int findParent(int x) {
if (p[x] == x) return x;
else return p[x] = findParent(p[x]);
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
p[i] = i;
for (int j = 0; j <= i; j++) scanf("%d", &a);
for (int j = i + 1; j < n; j++) {
scanf("%d", &a);
edges.push_back({ a, i, j });
}
}
sort(edges.begin(), edges.end());
int cnt = 0;
for (int i = 0; i < edges.size(); i++) {
int pa = findParent(edges[i][1]);
int pb = findParent(edges[i][2]);
if (pa != pb) {
p[pa] = pb;
ans += edges[i][0];
if (++cnt == n - 1) break;
}
}
printf("%lld", ans);
}
반응형
'Algorithm' 카테고리의 다른 글
백준 15926 : 현욱은 괄호왕이야!! (0) | 2021.11.17 |
---|---|
백준 5214 : 환승 (0) | 2021.11.17 |
백준 14719 : 빗물 (0) | 2021.11.17 |
백준 17490 : 일감호에 다리 놓기 (0) | 2021.11.17 |
백준 17825 : 주사위 윷놀이 (0) | 2021.11.17 |