매일 C++ day 9 / 섬 연결하기
2021-05-31
섬 연결하기
https://programmers.co.kr/learn/courses/30/lessons/42861#
최소신장트리
출발지점을 from, 도착지점을 to라 할 때
find_parent(to)는 find_parnet(from)을 반환한다.
섬 {0, 1, 2, …. , n} 이 있을 때
모든 섬의 find_parent()의 반환값이 섬 0이 되도록 한다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(vector<int> a, vector<int> b)
{
return a[2] < b[2];
}
int find_parent(int parent[], int n)
{
if (parent[n] == n) return n;
return find_parent(parent, parent[n]);
}
int solution(int n, vector<vector<int>> costs)
{
int answer = 0;
int parent[n];
for(int i=0; i<n; i++)
parent[i] = i;
sort(costs.begin(),costs.end(), cmp);
for(auto it:costs)
{
int a=find_parent(parent, it[0]), b=find_parent(parent, it[1]);
if(a!=b)
{
a<b ? parent[b]=a : parent[a]=b;
answer += it[2];
}
}
return answer;
}