MST와 쿠르스칼 알고리즘을 처음 공부했다.
BFS와 DFS를 처음 공부할때 처럼 차례로 풀어보겠다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int res = 0;
vector <int> parent;
int findParent(int a)
{
if (parent[a] == a)
return a;
else
return parent[a] = findParent(parent[a]);
}
void unionParent(int a, int b)
{
a = findParent(a);
b = findParent(b);
if (a != b)
parent[b] = a;
return;
}
bool sameParent(int a, int b)
{
a = findParent(a);
b = findParent(b);
if (a == b)
return true;
else
return false;
}
void find_answer(int N, int M, vector<pair<int, pair<int, int>>>& graph)
{
int i;
int a, b, cost;
parent.resize(N + 1, 0);
for (i = 1; i <= N; i++)
{
parent[i] = i;
}
for (int i = 0; i < M; i++)
{
a = graph[i].second.first;
b = graph[i].second.second;
cost = graph[i].first;
if (!sameParent(a, b))
{
unionParent(a, b);
res += cost;
}
}
cout << res << "\n";
return;
}
void input_graph(int* N, int* M, vector<pair<int, pair<int, int>>>& graph)
{
int i;
int a, b, c;
cin >> *N >> *M;
for (i = 0; i < *M; i++)
{
cin >> a >> b >> c;
graph.push_back({ c, {a, b} });
}
sort(graph.begin(), graph.end());//가중치를 기준으로 정렬
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, M;
vector<pair<int, pair<int, int>>>graph;
input_graph(&N, &M, graph);
find_answer(N, M, graph);
return 0;
}