본문 바로가기
문제 해결/BOJ

[백준] 중량제한

by 자잘 2023. 4. 14.

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

다익스트라를 활용하여 풀이하였습니다. 시작점에서 도착점으로 도달할 수 있는 경로 중에서 현재 노드까지 도달할 수 이:있는 최대 중량치와 다음 노드로 가는 간선의 중량치 중 더 작은 중량치를 선택하고 기존에 다음 노드까지 갈 수 있는 중량치보다 더 크면 갱신이 가능하게 됩니다. 이렇게 수행하면 각 노드까지 옮길 수 있는 최대 중량치가 저장이 되게 됩니다.

 

import sys, heapq
from collections import defaultdict

# sys.stdin = open("input.txt", "r")
input = sys.stdin.readline

n, m = tuple(map(int, input().split()))

graph = defaultdict(list)


for _ in range(m):
    a, b, w = tuple(map(int, input().split()))

    graph[a].append((b, w))
    graph[b].append((a, w))

start, end = tuple(map(int, input().split()))

dist = [-1] * (n + 1)

dist[start] = sys.maxsize

q = [(-sys.maxsize, start)]

while q:
    w, cur = heapq.heappop(q)
    w = -w

    if dist[cur] > w:
        continue

    if cur == end:
        break


    for n, nw in graph[cur]:
        # 가중치중 최소를 선택해야한다.
        next_max = min(w, nw)

        if dist[n] < next_max:
            dist[n] = next_max

            heapq.heappush(q, (-next_max, n))


print(dist[end])

'문제 해결 > BOJ' 카테고리의 다른 글

[백준] 욕심쟁이 판다  (0) 2023.04.15
[백준] 로고  (0) 2023.04.14
[백준] 소문난 칠공주  (0) 2023.04.13
[백준] 강의실 배정  (0) 2023.04.12
[백준] 동전 분배  (1) 2023.04.12