[백준 6497번] 전력난

2023. 9. 30. 00:59·알고리즘 문제풀이/백준
반응형

문제 링크: https://www.acmicpc.net/problem/6497

 

6497번: 전력난

성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하기로 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들

www.acmicpc.net

<문제 풀이> 최소 스패닝 트리, 크루스칼 알고리즘

 

크루스칼 알고리즘으로 최소 비용으로 모든 집을 연결하고, 연결된 비용의 총합을 전체 간선의 비용 총합에서 빼주면 됩니다.

 

<C++소스코드>

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

const int MAX_N = 200000;
vector<tuple<int, int, int> > edge;
int parents[MAX_N];

int Find(int x) {
    if (parents[x] == x) return x;
    return parents[x] = Find(parents[x]);
}

void Union(int x, int y) {
    int x_parents = Find(x);
    int y_parents = Find(y);
    if (x_parents < y_parents) parents[x_parents] = y_parents;
    else parents[y_parents] = x_parents;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
  
    while (true) {
        int n, m; cin >> n >> m;
        if (n == 0 && m == 0) break;
        edge = {};
        for (int i = 0; i < n; i++) parents[i] = i;

        int tot = 0;
        for (int i = 0; i < m; i++) {
            int u, v, w; cin >> u >> v >> w;
            edge.push_back({ w, u, v });
            tot += w;
        }

        sort(edge.begin(), edge.end());
        int cnt = 0, res = 0;
        for (auto& e : edge) {
            int w, u, v; tie(w, u, v) = e;
            if (Find(u) == Find(v)) continue;
            Union(u, v);
            cnt++;
            res += w;
            if (cnt == n - 1) break;
        }
        cout << tot - res<<'\n';
    }

    return 0;
}
반응형
저작자표시 (새창열림)

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 24042번] 횡단보도  (1) 2023.10.04
[백준 14938번] 서강그라운드  (0) 2023.09.30
[백준 1922번] 네트워크 연결  (0) 2023.09.28
[백준 4485] 녹색 옷 입은 애가 젤다지?  (0) 2023.09.27
[백준 5972번] 택배 배송  (0) 2023.09.19
'알고리즘 문제풀이/백준' 카테고리의 다른 글
  • [백준 24042번] 횡단보도
  • [백준 14938번] 서강그라운드
  • [백준 1922번] 네트워크 연결
  • [백준 4485] 녹색 옷 입은 애가 젤다지?
슥지니
슥지니
개발 블로그
  • 슥지니
    슥지니의 코딩노트
    슥지니
  • 전체
    오늘
    어제
    • 분류 전체보기 (198)
      • 알고리즘 문제풀이 (158)
        • 백준 (158)
      • 알고리즘 (6)
      • Node.js (2)
        • MongoDB (1)
        • 기타 (1)
      • spring (0)
      • 가상화폐 (1)
        • 바이낸스(Binance) (1)
      • C++ 테트리스 게임 (0)
      • C++ (10)
      • 안드로이드 프로그래밍 (21)
        • 코틀린 (21)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그래프
    콘솔 테트리스 게임
    우선순위 큐
    dfs
    알고리즘
    구현
    그리디
    시뮬레이션
    BFS
    dp
    코틀린
    다이나믹 프로그래밍
    Kotlin
    C
    자료구조
    콘솔
    코틀린을 활용한 안드로이드 프로그래밍
    백트랙킹
    C++
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
슥지니
[백준 6497번] 전력난
상단으로

티스토리툴바