📌 Greedy
⭐️ 크루스칼
다익스트라 알고리즘과 달리 크루스칼 알고리즘에서는 부모 노드를 갱신해가며 탐색하는 것이 중요
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
vector<int> parents;
bool cmp(vector<int> v1, vector<int> v2) {
return v1[2]<v2[2];
}
int getParent(int n) {
if(parents[n]==n) return n;
else return getParent(parents[n]);
}
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
for(int i=0;i<n;i++) {
parents.push_back(i);
}
sort(costs.begin(),costs.end(),cmp);
for(int i=0;i<costs.size();i++) {
int a=costs[i][0];
int b=costs[i][1];
int c=costs[i][2];
int pa=getParent(a);
int pb=getParent(b);
if(pa!=pb) {
if(pa<pb) parents[pb]=pa;
else parents[pa]=pb;
answer+=c;
}
}
return answer;
}