Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags more
Archives
Today
Total
관리 메뉴

쓰고싶은거 써요

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

백준 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)
Comments