Coding Is My Life

코딩은 인생

c++ 백준 문제 풀이

[백준/C++][(1197번)최소 스패닝 트리]

산기대 컴공 2020. 11. 19. 23:29
728x90

문제

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

 

1197번: 최소 스패닝 트리

첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이

www.acmicpc.net

이 문제는 최소 스패닝 트리 알고리즘을 사용하면 바로 풀리는 문제이다.

문제해결

1.vector <pair<int,pair<int,int>>> v 를 사용하여 가중치,노드1,노드2 순으로 입력받는다.

2.가중치에 대하여 오름차순으로 정렬한다.

3.parent배열을 모두 parent[i] = i로 초기화 한다 (처음에는 모두 부모가 자기 자신이다 -> 모두 다 끊어진 상태로 시작한다,최소스패닝 알고리즘이다)

4.만약 두 노드가 연결되지 않은 노드라면 연결하고 가중치를 result에 더해간다. ->두 노드가 연결된 유무는 find함수를 통해 알아낸다.

5.그리고 Union함수로 두 함수를 연결해준다.

6. 4,5번 방법을 반복한다.

 

코드

ide.goorm.io/shared_files/sksj0111_a4ee03f393e4a502b8b6b01d29019b561605796608074

 

728x90