No Rules Rules

행성 연결 (feat. 백준, 16398번) 본문

생활/코테

행성 연결 (feat. 백준, 16398번)

개발하는 완두콩 2023. 3. 15. 15:31
728x90
반응형

행성 연결
https://www.acmicpc.net/problem/16398

 

16398번: 행성 연결

홍익 제국의 중심은 행성 T이다. 제국의 황제 윤석이는 행성 T에서 제국을 효과적으로 통치하기 위해서, N개의 행성 간에 플로우를 설치하려고 한다. 두 행성 간에 플로우를 설치하면 제국의 함

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
vector<pair<int, int>> arr[1001];           // 행성 j, 관리비용
bool visit[1001]{false};
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;      // 관리비용, 행성 j
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
    int N, next, nnext, cost;
    long long ans = 0;
    cin >> N;
    for(register int i = 1, j, c; i <= N; ++i)
        for(j = 1; j <= N; ++j)
            cin >> c, arr[i].push_back(make_pair(j, c)), arr[j].push_back(make_pair(i, c));
    q.push(make_pair(0, 1));
    while(!q.empty()){
        next = q.top().second, cost = q.top().first; q.pop();
        if(visit[next])
            continue;
        visit[next] = true;
        ans += cost;
        for(auto& v : arr[next]){
            nnext = v.first, cost = v.second;
            if(!visit[nnext])
                q.push(make_pair(cost, nnext));
        }
    }
    cout << ans;
	return 0;
}
// *&)*@*

 

반응형

최소 스패닝 트리를 구하는 문제입니다.

저는 프림 알고리즘을 사용하여 풀이하였습니다.

총 관리비용은 int의 범위를 벗어날 수 있으므로 64비트 자료형을 사용해야 합니다.

728x90
반응형
Comments