728x90
반응형
6497번: 전력난
문제
https://www.acmicpc.net/problem/6497
6497번: 전력난
성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하기로 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들
www.acmicpc.net
풀이
두 집 사이의 거리만큼의 비용이 드는 가로등이 있고 가로등 불이 켜져 있는 도로로만 이동 가능하도록 유지하면서 최소 비용이 들도록 불을 꺼야 하므로 전체 간선의 가중치에서 최소 스패닝 트리(MST)의 가중치를 빼주면 된다.
코드
#include <bits/stdc++.h>
using namespace std;
vector<int> p;
int find(int x) {
if (p[x] != x)
p[x] = find(p[x]);
return p[x];
}
void merge(int x, int y) {
x = find(x);
y = find(y);
if (x < y)
p[y] = x;
else
p[x] = y;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
while (1) {
int V, E, ans = 0, sum = 0;
vector<pair<int, pair<int, int>>> edge;
cin >> V >> E;
if (!(V + E))
break;
p.resize(V + 1);
iota(p.begin(), p.end(), 0);
while (E--) {
int u, v, w;
cin >> u >> v >> w;
edge.push_back({w, {u, v}});
sum += w;
}
sort(edge.begin(), edge.end());
for (auto [weight, path] : edge)
if (find(path.first) != find(path.second)) {
ans += weight;
merge(path.first, path.second);
}
cout << sum - ans << '\n';
}
return 0;
}
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 / BOJ] C++ 16567 바이너리 왕국 (4) | 2023.04.12 |
---|---|
[백준 / BOJ] C++ 27866 문자와 문자열 (2) | 2023.04.11 |
[백준 / BOJ] C++ 27939 가지 교배 (12) | 2023.04.10 |
[백준 / BOJ] C++ 27880 Gahui and Soongsil University station (4) | 2023.04.09 |
[백준 / BOJ] C++ 3780 네트워크 연결 (2) | 2023.04.08 |