hades

[Baekjoon] 1197๋ฒˆ: ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1197๋ฒˆ: ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

hades1 2024. 9. 2. 18:36

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/1197

 

๐Ÿ” ์„ค๊ณ„

๋‹จ์ˆœํžˆ, ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 

 

์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๋ณต๊ธฐํ•ด๋ณด์ž.

 

1. ๊ฐ„์„  ์ •๋ณด๋ฅผ ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ๋ณธ์ธ์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

2. ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ(= ๋น„์šฉ์ด ์ž‘์€ ๊ฐ„์‚ฐ๋ถ€ํ„ฐ) ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐ ์‹œ๋„ํ•œ๋‹ค. ๋‘ ์ •์ ์˜ ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ, ์ด๋ฏธ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๋‘ ์ •์ ์˜ ๋ถ€๋ชจ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ union์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๊ณ  ๊ฐ€์ค‘์น˜์— ๋น„์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int v, e, a, b, c, result = 0;
vector<int> parent(10001);
priority_queue<vector<int>, vector<vector<int>>, greater<vector<int>>> edges;

int find_parent(int x) {
	if (parent[x] != x) {
		return find_parent(parent[x]);
	}
	return x;
}

void union_parent(int a, int b) {
	if (a > b) {
		parent[b] = a;
	}
	else {
		parent[a] = b;
	}
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);	

	cin >> v >> e;

	for (int i = 1; i <= v; i++) {
		parent[i] = i;
	}

	for (int i = 0; i < e; i++) {
		cin >> a >> b >> c;
		edges.push({ c, a, b });
	}

	while (!edges.empty()) {
		int c = edges.top()[0];
		int a = edges.top()[1];
		int b = edges.top()[2];
		edges.pop();

		a = find_parent(a);
		b = find_parent(b);

		if (a != b) {
			union_parent(a, b);
			result += c;
		}
	}

	cout << result << "\n";

	return 0;
}