백준 1922 c++

magicdrill·2024년 3월 11일
0

백준 문제풀이

목록 보기
128/655

백준 1922 c++

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;
}

0개의 댓글