1939번: 중량제한
첫째 줄에 N, M(1≤M≤100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1≤A, B≤N), C(1≤C≤1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 C인 다리
www.acmicpc.net
import sys
from collections import deque
# 이동가능한 물품중량 (mid) => 이분탐색
def search(N, SP, EP, start, end):
res = 0
while start <= end:
mid = (start + end) // 2
is_move = dfs(N, SP, EP, mid) # 이동가능 여부
if not is_move:
end = mid - 1
else:
start = mid + 1
res = mid
return res
def dfs(N, SP, EP, weight):
qu = deque([SP])
visited = [0] * (N+1)
while qu:
node = qu.popleft()
if not visited[node]:
visited[node] = 1
if node == EP:
return True
for e, w in graph[node]:
if w >= weight:
qu.append(e)
return False
N, M = map(int, input().split())
graph = [[] for _ in range(N + 1)]
min_w, max_w = 1e9, 0
for _ in range(M):
x, y, w = map(int, sys.stdin.readline().split())
graph[x].append((y, w))
graph[y].append((x, w))
min_w = min(min_w, w)
max_w = max(max_w, w)
SP, EP = map(int, input().split())
print(search(N, SP, EP, min_w, max_w))
'BOJ 알고리즘 (패캠) > 정렬, 탐색' 카테고리의 다른 글
2250번: 트리의 높이와 너비 (트리, 재귀) - Fastcampus (0) | 2020.10.07 |
---|---|
1991번: 트리 순회 (트리, 재귀) - Fastcampus (0) | 2020.10.07 |
2110번: 공유기 설치 (탐색, 이분탐색) - Fastcampus (0) | 2020.10.07 |
1236번: 성 지키기 (탐색) - Fastcampus (0) | 2020.10.06 |
1668번: 트로피 진열 (탐색) - Fastcampus (0) | 2020.10.06 |