동캄의 코딩도장

백준 17396 [백도어] 파이썬 본문

코테/BOJ

백준 17396 [백도어] 파이썬

동 캄 2022. 5. 17. 00:40

https://www.acmicpc.net/problem/17396

 

17396번: 백도어

첫 번째 줄에 분기점의 수와 분기점들을 잇는 길의 수를 의미하는 두 자연수 N과 M이 공백으로 구분되어 주어진다.(1 ≤ N ≤ 100,000, 1 ≤ M ≤ 300,000) 두 번째 줄에 각 분기점이 적의 시야에 보이는

www.acmicpc.net

# 백준 17396 백도어
import queue
import sys
import heapq
from collections import defaultdict
input = sys.stdin.readline
N, M = map(int, input().split())
permission = list(map(int, input().split()))
permission[N-1] = 0
graph = defaultdict(list)
for _ in range(M):
    a, b, cost = map(int, input().split())
    if permission[a] == 0 and permission[b] == 0:
        graph[a].append([b, cost])
        graph[b].append([a, cost])


def dijkstra(graph, start):
    distances = {node: float('inf') for node in range(N)}
    distances[start] = 0
    queue = []
    heapq.heappush(queue, [distances[start], start])
    while queue:
        curr_dist, curr_destination = heapq.heappop(queue)
        if distances[curr_destination] < curr_dist:
            continue
        for new_destination, new_dist in graph[curr_destination]:
            dist = new_dist+curr_dist
            if dist < distances[new_destination]:
                distances[new_destination] = dist
                heapq.heappush(queue, [dist, new_destination])
    return distances


distances = dijkstra(graph, 0)
if distances[N-1] == float('inf'):
    print(-1)
else:
    print(distances[N-1])

 

다익스트라를 이용한 문제이다. 하나라도 permission이 1인 노드가 있다면 graph에 추가하지 않는다.

'코테 > BOJ' 카테고리의 다른 글

백준 11909 [배열 탈출] 파이썬  (0) 2022.05.17
백준 14284 [간선 이어가기2] 파이썬  (0) 2022.05.17
백준 5972 [택배 배송] 파이썬  (0) 2022.05.17
백준 1753 [최단경로] 파이썬  (0) 2022.05.17
백준 9019 [DSLR] 파이썬  (0) 2022.04.18