본문 바로가기

MST

(3)
C++ 백준 1647 (도시 분할 계획) 백준 1647 (도시 분할 계획) https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 설명 이 문제는 MST를 찾는 문제이다. MST를 찾기 위해 크루스칼 알고리즘을 사용해야하는데 이에 대한 자세한 설명은 여기(링크)에 있다. 연결되어있는 여러 도시를 가장 작은 MST 두개의 그룹으로 나누는 것이 문제의 목표이다. 때문에 주어진 그래프의 MST로 찾은 후에 찾은 MST중 가중치가 가장 큰 엣지만 제거한다면 문제..
크루스칼(Kruskal) 알고리즘 설명 크루스칼 알고리즘은 프림 알고리즘과 함께 그래프에서 MST(Minimum Spanning Tree)를 찾을 때 사용 되는 알고리즘이다. 알고리즘을 전개하는 과정에서 소속집단의 검색과 합병기능이 필요한데, 이를 위해 유니온파인드에 대한 선행 학습이 필요하다. 유니온 파인드(Union Find) 설명 유니온 파인드는 집합의 표현을 빠르게 구현하는 알고리즘이다. 예를 들어보자. 사람 P1, P2, P3, P4가 있다. 각 사람은 자신의 소속집단 C1, C2, C3, C4에 가입되어 있다고 가정하자. 1. C3에 속한 P seongmok.com 크루스칼 알고리즘은 사이클을 이루지 않고 크기가 작은 간선부터 탐색해 나아가는 방법을 사용한다. 이때, 사이클 생성 여부를 확인하기 위해 유니온 파인드를 사용한다...
유니온 파인드(Union Find) 설명 유니온 파인드는 집합의 표현을 빠르게 구현하는 알고리즘이다. 예를 들어보자. 사람 P1, P2, P3, P4가 있다. 각 사람은 자신의 소속집단 C1, C2, C3, C4에 가입되어 있다고 가정하자. 1. C3에 속한 P3가 P1과의 합병을 진행한다. 그렇다면 P1, P2, P3, P4의 각 소속집단은 C1, C2, C1, C4으로 바뀔 것이다. 2. C1에 속한 P1이 P4와의 합병을 진행한다. 그렇다면 P1, P2, P3, P4의 각 소속집단은 C4, C2, C4, C4으로 바뀔 것이다. 2번 과정에서, P1(C1)과 P4(C4)의 병합을 위해 C1소속 사람과 C4소속 사람의 합병이 진행되었다. 이로인해 C1에 소속이었던 P3의 소속집단도 C4로 변한것을 확인할 수 있는데, 이 방법은 최악의 경..