티스토리 뷰
반응형
https://www.acmicpc.net/problem/1197
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 그래프 이론
- 최소 스패닝 트리
⊙ 문제 접근 과정
이번에 다뤄볼 문제는 MST 알고리즘이다.
MST는 최소 스패닝 트리로 스패닝 트리 중에서 사용된 간선들의 가중치 합이 최소인 트리를 말한다.
MST의 구현 방법에는 Kruskal MST 알고리즘과 Prim MST 알고리즘이 있는데
이번 문제는 Kruskal MST 알고리즘으로 접근해봤다.
Kruskal MST 알고리즘의 로직은 아래와 같다.
- 간선들의 가중치에 대해 오름차순 정렬
- 가장 낮은 가중치를 선택(그리디 알고리즘)
⊙ 문제 풀이
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
#define MAX 10001
using namespace std;
int V, E;
int parent[MAX];
int result=0;
vector<tuple<int,int,int>> v;
int find(int x) {
if(parent[x]==x) return x;
else return parent[x]=find(parent[x]);
}
void connection(int x,int y) {
x=find(x);
y=find(y);
if(x!=y) {
parent[x]=y;
}
}
bool same(int x,int y) {
x=find(x);
y=find(y);
if(x==y) return true;
else return false;
}
int main() {
cin >> V >> E;
for(int i=1;i<=V;i++)
parent[i]=i;
for(int i=0;i<E;i++) {
int A,B,C;
cin >> A >> B >> C;
v.push_back({C,A,B});
}
sort(v.begin(),v.end());
for(int i=0;i<E;i++) {
if(!same(get<1>(v[i]), get<2>(v[i]))) {
connection(get<1>(v[i]), get<2>(v[i]));
result +=get<0>(v[i]);
}
}
cout << result;
}
⊙ 결과
⊙ 마무리
트리는 파면 팔 수록 알아야 할게 많다....ㅠ
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > C++ [CPP]' 카테고리의 다른 글
[백준(BOJ)] 2579번 : 계단 오르기 - C++[CPP] (0) | 2021.06.10 |
---|---|
[백준(BOJ)] 1922번 : 네트워크 연결 - C++[CPP] (0) | 2021.06.06 |
[백준(BOJ)] 15650번 : N과 M (2) - C++[CPP] (0) | 2021.06.04 |
[백준(BOJ)] 15649번 : N과 M (1) - C++[CPP] (1) | 2021.06.03 |
[백준(BOJ)] 11725번 : 트리의 부모 찾기 - C++[CPP] (1) | 2021.06.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 우종정
- 자바스크립트
- Web
- 운영체제
- 해답
- Python
- 쉽게배우는자바프로그래밍
- 백준
- 문자열
- 정리
- C++
- JS
- BFS
- 쉽게 배우는 자바 프로그래밍
- 풀이
- 연습문제
- 알고리즘
- 쉽게배우는
- py
- 구현
- 파이썬
- 정답
- OS
- 정렬
- java
- 답
- 자바
- 그리디
- CPP
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함