Problem Solving/BOJ(백준)
[BOJ]백준 1922번: 네트워크 연결/MST
이진2
2020. 11. 15. 00:28
1922번: 네트워크 연결
이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.
www.acmicpc.net
컴퓨터를 연결하는 네트워크(가중치 무방향 그래프)가 주어졌을 때, 해당 네트워크의 MST를 구하는 문제이다
MST는 프림 알고리즘으로 구할 수 잇다
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#define INF 987654321
using namespace std;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
vector<vector<pair<int, int>>> edge;
int v, e, cost[10005], pre[10005], ans;
bool visit[10005];
void prim(int u) {
visit[u] = true;
for (auto v : edge[u])
if (!visit[v.second])pq.push(v);
while (!pq.empty()) {
auto k = pq.top(); pq.pop();
if (!visit[k.second]) {
ans += k.first;
prim(k.second);
return;
}
}
}
int main() {
scanf("%d%d", &v, &e); edge.resize(v + 1);
for (int i = 0, u, V, w; i < e; i++) {
scanf("%d%d%d", &u, &V, &w);
edge[u].push_back({ w,V });
edge[V].push_back({ w,u });
}
prim(1);
printf("%d", ans);
return 0;
}