BOJ 6497 전력난

Jmnote (토론 | 기여)님의 2023년 12월 29일 (금) 01:27 판 (새 문서: ==개요== {{BOJ | 단계 = 37 | 분류1 = 그래프 이론 | 분류2 = 최소 스패닝 트리 }} ==C++== <syntaxhighlight lang='cpp'> #include <bits/stdc++.h> using namespace std;...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1 개요

BOJ 6497 전력난

2 C++

#include <bits/stdc++.h>
using namespace std;

int m, n, sumDist;
typedef pair<int, int> Road;
vector<Road> v[200001];
bool visited[200001];

struct compare {
    bool operator()(Road a, Road b) {
        return a.second > b.second;
    }
};

void solve() {
    int answer = sumDist;
    memset(visited, 0, sizeof(visited));
    priority_queue<Road, vector<Road>, compare> pq;
    visited[0] = true;
    for (int i=0; i<v[0].size(); i++) pq.push(v[0][i]);
    while (!pq.empty()) {
        Road x = pq.top();
        pq.pop();
        if (visited[x.first]) continue;
        visited[x.first] = true;
        answer -= x.second;
        for (const auto& nx: v[x.first]) {
            if(visited[nx.first]) continue;
            pq.push(nx);
        }
    }
    cout << answer << '\n';
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    while (true) {
        cin >> m >> n;
        if (m == 0 && n == 0) break;
        for (int i=0; i<m; i++) {
            v[i].clear();
        }
        sumDist = 0;
        int x, y, z;
        for(int i=0; i<n; i++) {
            cin >> x >> y >> z;
            v[x].push_back({y, z});
            v[y].push_back({x, z});
            sumDist += z;
        }
        solve();
    }
}
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}