백준 python 기록

백준 18352 파이썬 특정 거리의 도시 찾기

우히힝 2021. 10. 31. 20:22

링크 : https://www.acmicpc.net/problem/18352

 

18352번: 특정 거리의 도시 찾기

첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개

www.acmicpc.net

 

bfs로도 풀 수 있을것 같은데?? 에서 시간 초과가 날 것 같아서 그냥 바로 다익스트라로 직행했다.

 

적당히 다익스트라 를 적용했다. 노드에서 노드로 가는 가중치가 전부 1 이므로 어렵지 않았다.

import sys
import heapq

n,m,k,start = map(int,input().split())
INF = sys.maxsize
input = sys.stdin.readline

city = [[] for i in range(n+1)]
dp=[INF]*(n+1)

for i in range(m):
    v,c = map(int,input().split())

    city[v].append((1,c))

heap = []

def dijkstra(start):
    dp[start] = 0

    heapq.heappush(heap,(0,start))

    while heap:
        w,now = heapq.heappop(heap)

        if dp[now] < w:
            continue

        for w_node, node in city[now]:

            newx_w = w+ w_node

            if newx_w < dp[node]:
                dp[node] = newx_w

                heapq.heappush(heap,(newx_w,node))

dijkstra(start)

result= 0

for i in range(len(dp)):
    if dp[i] == k:
        print(i)
        result += 1

if result == 0:
    print(-1)