반응형

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

 

간선을 가중치로 오름차순 정렬한 뒤, 사이클이 없다면 간선을 연결시켜주었습니다.

 

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

vector<vector<int>> edges;
int p[10001];
int v, e, a, b, c, ans = 0;

int findParent(int x) {
	if (p[x] == x) return x;
	else return p[x] = findParent(p[x]);
}

int main() {
	scanf("%d %d", &v, &e);
	for (int i = 1; i <= v; i++) p[i] = i;
	while (e--) {
		scanf("%d %d %d", &a, &b, &c);
		edges.push_back({ c, a, b });
	}
	sort(edges.begin(), edges.end());
	for (int i = 0; i < edges.size(); i++) {
		int pa = findParent(edges[i][1]);
		int pb = findParent(edges[i][2]);
		if (pa != pb) {
			p[pa] = pb;
			ans += edges[i][0];
		}
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1926 : 그림  (0) 2021.11.15
백준 14490 : 백대열  (0) 2021.11.15
프로그래머스 : 단체사진 찍기  (0) 2021.11.15
프로그래머스 : 카카오프렌즈 컬러링북  (0) 2021.11.15
프로그래머스 : N개의 최소공배수  (0) 2021.11.15

+ Recent posts