We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1753๋ฒˆ: ์ตœ๋‹จ๊ฒฝ๋กœ - ํŒŒ์ด์ฌ

Redddy 2022. 7. 30. 11:44

๐Ÿ”ˆ ๋ฌธ์ œ

๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ฃผ์–ด์ง„ ์‹œ์ž‘์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ชจ๋“  ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๋Š” 10 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) ๋ชจ๋“  ์ •์ ์—๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์‹œ์ž‘ ์ •์ ์˜ ๋ฒˆํ˜ธ K(1 ≤ K ≤ V)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ E๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ๊ฐ„์„ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ (u, v, w)๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” u์—์„œ v๋กœ ๊ฐ€๋Š” ๊ฐ€์ค‘์น˜ w์ธ ๊ฐ„์„ ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. u์™€ v๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋ฉฐ w๋Š” 10 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ์Œ์— ์œ ์˜ํ•œ๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ V๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ, i๋ฒˆ์งธ ์ค„์— i๋ฒˆ ์ •์ ์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฒฝ๋กœ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์‹œ์ž‘์  ์ž์‹ ์€ 0์œผ๋กœ ์ถœ๋ ฅํ•˜๊ณ , ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” INF๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์œผ๋‹ˆ ์ด ๋ฌธ์ œ๋Š” ๋ฐ์ดํฌ์ŠคํŠธ๋ผ ๋ฌธ์ œ์ด๋‹ค!

์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํฌ์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€๋ฉด ๋˜์—ˆ๋‹ค. 

 

๐Ÿ’ป ์ฝ”๋“œ

import sys, heapq
input = sys.stdin.readline

V,E = map(int,input().split()) # ๋…ธ๋“œ์™€ ๊ฐ„์„ 
k=int(input()) # ์‹œ์ž‘ ๋…ธ๋“œ

# ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
graph=[[] for _ in range(V+1)]
for _ in range(E):
    e,v,w=map(int,input().split())
    graph[e].append([w,v]) # [๊ฐ€์ค‘์น˜, ๋…ธ๋“œ]

def dijkstra(start):
    INF=1e9
    visited=[INF]*(V+1) # ๋ฌดํ•œ์œผ๋กœ ์ดˆ๊ธฐํ™”
    visited[start]=0 # ์‹œ์ž‘ ๋…ธ๋“œ ๊ฐ€์ค‘์น˜๋Š” 0
    q=[[0,start]] # [๊ฐ€์ค‘์น˜, ๋…ธ๋“œ]
    while q:
        cost,node=heapq.heappop(q)
        if cost > visited[node]: # ํ˜„์žฌ ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ๋กœ์˜ ๋น„์šฉ์ด ์ด์ „ ๋น„์šฉ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ฐ€์ง€์•Š์Œ
            continue
        for k,u in graph[node]:
            if visited[u] > visited[node]+k: # ์ด๋™ ๋น„์šฉ์ด ์ž‘๋‹ค๋ฉด
                visited[u] = visited[node]+k # ๊ทธ๋ ‡๊ฒŒ ์ด๋™
                heapq.heappush(q,[visited[u], u]) # ์šฐํ์— ์‚ฝ์ž…
    return visited[1:] # 0๋ฒˆ์งธ ์ธ๋ฑ์Šค ์ œ์™ธ

for ans in dijkstra(k):
    print(ans if ans!=1e9 else 'INF')

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

๋งž์™œํ‹€์ธ์ค„ ์•Œ์•˜์ง€๋งŒ ํ‹€ํ‹€์ด์˜€์Œ

ํ‹€๋ฆฐ ์ด์œ ๋Š” ์‹œ์ž‘ ์ •์ ์„ ๋ฌด์กฐ๊ฑด 1๋กœ ๋‘์—ˆ์—ˆ๋‹ค..ใ…Ž

๋ฐ˜๋ก€ ๋ช‡๊ฐœ ๋Œ๋ ค๋ณด๋Š”๋ฐ ์ด์ƒํ•œ ๊ฐ’์ด ๋‚˜์™€ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ๋” ์‚ดํŽด๋ณด๋‹ค๊ฐ€ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ์ตœ๋‹จ๊ฒฝ๋กœ

 

1753๋ฒˆ: ์ตœ๋‹จ๊ฒฝ๋กœ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) ๋ชจ๋“  ์ •์ ์—๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์‹œ์ž‘ ์ •์ ์˜ ๋ฒˆํ˜ธ K(1 ≤ K ≤ V)๊ฐ€

www.acmicpc.net