반응형
https://www.acmicpc.net/problem/1197
1. 해결방법
크루스칼 알고리즘과 Union find를 이용하여 해결.
2. 코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int N, K;
vector<pair<int, pair<int, int>>> vec;
int Parent[10001];
int result = 0;
int Find(int x) {
if (x == Parent[x])
return x;
else
return Parent[x] = Find(Parent[x]);
}
void Union(int x, int y) {
x = Find(x);
y = Find(y);
if(x!=y) Parent[y] = x;
}
bool SameParent(int x, int y) {
x = Find(x);
y = Find(y);
if (x == y) return true;
return false;
}
int main(int c, char** v)
{
cin >> N >> K;
for (int i = 0; i < K; i++) {
int x = 0, y = 0, cost = 0;
cin >> x >> y >> cost;
vec.push_back(make_pair(cost,make_pair(x, y)));
}
sort(vec.begin(), vec.end());
for (int i = 1; i <= N; i++) {
Parent[i] = i;
}
for (int i = 0; i < K; i++) {
if (SameParent(vec[i].second.first, vec[i].second.second) == false) {
Union(vec[i].second.first, vec[i].second.second);
result += vec[i].first;
}
}
cout << result;
}
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] #1034 램프 (0) | 2020.04.13 |
---|---|
[백준] #1012 유기농 배추 (0) | 2020.04.06 |
[백준] #1068 트리 (0) | 2020.03.29 |