#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool Compare(vector<int>& a, vector<int>& b)
{
return a[2] < b[2];
}
int Find(vector<int>& parent, int x)
{
if(parent[x] != x)
{
parent[x] = Find(parent, parent[x]);
}
return parent[x];
}
void Union(vector<int>& parent, vector<int>& rank, int x, int y)
{
int node1 = Find(parent, x);
int node2 = Find(parent, y);
if(node1 != node2)
{
if(rank[node1] > rank[node2])
{
parent[node2] = node1;
}
else if (rank[node1] < rank[node2])
{
parent[node1] = node2;
}
else
{
parent[node2] = node1;
rank[node1]++;
}
}
}
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
sort(costs.begin(), costs.end(), Compare);
vector<int> parent(n);
vector<int> rank(n,0);
for(int i =0; i < n; ++i)
{
parent[i] = i;
}
int inEdge = 0;
for (const auto& cost : costs) {
int u = cost[0];
int v = cost[1];
int bridgeCost = cost[2];
if (Find(parent, u) != Find(parent, v)) {
Union(parent, rank, u, v);
answer += bridgeCost;
inEdge++;
if (inEdge == n - 1) {
break;
}
}
}
return answer;
}
'코딩 테스트' 카테고리의 다른 글
백준 1644 소수의 연속합 (0) | 2024.11.15 |
---|---|
백준 - 12865 배낭 문제 (0) | 2024.11.13 |
백준 1010 - 다리 놓기 (0) | 2024.11.11 |
백준 1707 - 이분 그래프 (0) | 2024.11.11 |
백준 2559 (0) | 2024.11.08 |