-
https://www.acmicpc.net/problem/1939
1939번: 중량제한
첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이
www.acmicpc.net
아이디어
이진 탐색을 이용한 매개변수 탐색 문제입니다. 목표지점까지 갈 수 있는 방법이 없을때까지 물품의 무게를 조금씩 줄여나가며 최적의 값을 찾는 방법으로 풀이 했습니다.
#include <iostream>#include <vector>using namespace std;int S, E;int N, M;int maxW;vector<vector<pair<int, int>>> land;vector<bool> visited;void input() {cin >> N >> M;land.resize(N + 1, vector<pair<int, int>>());for (int i = 0; i < M; i++) {int s, e, r;cin >> s >> e >> r;land[s].push_back({ e,r });land[e].push_back({ s,r });if (r > maxW) maxW = r;}cin >> S >> E;}/*dfs 활용*/void findMax(int cur, int target) {for (int i = 0; i < land[cur].size(); i++) {int next = land[cur][i].first;int weight = land[cur][i].second;if (weight < target) continue;if (visited[next]) continue;visited[next] = true;findMax(next, target);}}int BinarySearch(int l, int r) {while (l <= r) {int mid = (r + l) >> 1;visited.clear();visited.resize(N + 1, false);visited[S] = true;findMax(S, mid);if (visited[E]) {l = mid + 1;}else {r = mid - 1;}}return r;}void solution() {int res = BinarySearch(0, maxW);cout << res;}int main(void) {input();solution();}'알고리즘 > 백준' 카테고리의 다른 글
BOJ 2613 숫자구슬 / C++ (0) 2022.12.04 BOJ 1072 게임 / C++ (0) 2022.12.04 BOJ 18428 감시 피하기 / C++ (0) 2022.12.03 BOJ 2632 피자판매 / C++ (1) 2022.12.03 BOJ 3109 빵집 / C++ (2) 2022.09.15 댓글