// Copyright © 2021 ์์ฃผํ. All rights reserved.
// ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(์ต์์คํจ๋ ํธ๋ฆฌ)
// https://www.acmicpc.net/problem/1197
// BOJ1197 ์ต์ ์คํจ๋ ํธ๋ฆฌ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int V, E; // V=์ ์ ์ ๊ฐ์, E=๊ฐ์ ์ ๊ฐ์
int parent[10001]; //๋ถ๋ชจ ํ
์ด๋ธ ์ด๊ธฐํ
vector<pair<int, pair<int, int>>>edges; //๋ชจ๋ ๊ฐ์ ์ ๋ด์ ๋ฆฌ์คํธ์, ์ต์ข
๋น์ฉ์ ๋ด์ ๋ณ์
int ans = 0;
int findParent(int x) {
if (x == parent[x]) return x;
else return x = findParent(parent[x]);
}
void unionParent(int a, int b) {
a = findParent(a);
b = findParent(b);
if (a < b) parent[b] = a;
else parent[a] = b;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> V >> E;
for (int i = 1; i <= V; i++) { //๋ถ๋ชจ ํ
์ด๋ธ์์์, ๋ถ๋ชจ๋ฅผ ์๊ธฐ ์์ ์ผ๋ก ์ด๊ธฐํ
parent[i] = i;
}
for (int i = 0; i < E; i++) { //๋ชจ๋ ๊ฐ์ ์ ๋ํ ์ ๋ณด ์
๋ ฅ
int a, b, cost;
cin >> a >> b >> cost;
edges.push_back({ cost, { a,b } }); //๋น์ฉ ์์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด์ ํํ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋น์ฉ์ผ๋ก ์ค์
}
sort(edges.begin(), edges.end()); //๊ฐ์ ์ ๋น์ฉ์์ผ๋ก ์ ๋ ฌ(์ค๋ฆ์ฐจ์)
for (int i = 0; i < edges.size(); i++) { //๊ฐ์ ์ ํ๋์ฉ ํ์ธ
int cost = edges[i].first;
int a = edges[i].second.first;
int b = edges[i].second.second;
if (findParent(a) != findParent(b)) { //์ฌ์ดํด์ด ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ์๋ง ์งํฉ์ ํฌํจ
unionParent(a, b);
ans += cost;
}
}
cout << ans;
}
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 1253๋ฒ - ์ข๋ค (0) | 2021.11.02 |
---|---|
[๋ฐฑ์ค,c++] 1238๋ฒ - ํํฐ (0) | 2021.11.02 |
[๋ฐฑ์ค,c++] 12015๋ฒ - ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด2 (0) | 2021.11.02 |
[๋ฐฑ์ค,c++] 11931๋ฒ - ์ ์ ๋ ฌํ๊ธฐ4 (0) | 2021.11.02 |
[๋ฐฑ์ค,c++] 11866๋ฒ - ์์ธํธ์ค ๋ฌธ์ 0 (0) | 2021.11.02 |
[๋ฐฑ์ค,c++] 1182๋ฒ - ๋ถ๋ถ ์์ด์ ํฉ (0) | 2021.11.01 |
๋๊ธ