๋ฌธ์
๋ฐฑ์ค 17396 ๋ฐฑ๋์ด
https://www.acmicpc.net/problem/17396
๋ฌธ์ ํ์ด
๋ฐฑ๋์ด ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์ต๋จ์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ก ๊ฐ๊ฐ์ ๋ถ๊ธฐ์ ์ผ๋ก ๊ฐ๋ ์๊ฐ์ด ๊ฐ์ค์น๊ฐ ๋๋ ๋ค์ต์คํธ๋ผ ๋ฌธ์
(n-1)๋ฒ์งธ ๋ถ๊ธฐ์ ์ ๊ฐ์ด 1์ด์ด๋ ๊ฐ ์ ์๋ ๋ถ๊ธฐ์ ์ด๊ธฐ์ ๊ฐ์ด 0์ธ ๋ถ๊ธฐ์ ๊ณผ ๋์ผ
์ด๋ฅผ ์ ์ธํ ๋ถ๊ธฐ์ ์ ๊ฐ์ด 1์ด๋ผ๋ฉด continue ํด์ฃผ๊ธฐ
๊ฐ๋ ์ ๋ฆฌ
๋ค์ต์คํธ๋ผ๋ ์ต๋จ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์์ ์ผ๋ก๋ถํฐ ๋ค๋ฅธ ๋ชจ๋ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋๋ฐ ์ฐ์ธ๋ค.
bfs๋ ์ต๋จ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง ์ฐจ์ด์ ์ด ์๋ค๋ฉด, bfs๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ 1๋ก ๋์ผํ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ณ
๋ค์ต์คํธ๋ผ๋ ๊ฐ์ค์น๊ฐ ์์ด ์๋ ๊ฐ์ธ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
heapq ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ตฌํ!
์ฝ๋
import sys
import heapq
inf=sys.maxsize
input=sys.stdin.readline
n,m=map(int,input().split())
can=list(map(int,input().split()))
can[-1]=0 ##๋ฅ์์ค์๋ ๋ฐฉ๋ฌธ ๊ฐ๋ฅ
link=[[] for _ in range(n)]
for i in range(m):
a,b,t=map(int,input().split())
link[a].append([b,t])
link[b].append([a,t])
heap=[]
heapq.heappush(heap,[0,0])
dp=[inf for _ in range(n)]
dp[0]=0
while(heap):
w,now=heapq.heappop(heap)
if dp[now]<w:
continue
else:
for nxt,nxt_w in link[now]:
wei=nxt_w+w
if dp[nxt]>wei and can[nxt]==0:
dp[nxt]=wei
heapq.heappush(heap,[wei,nxt])
result=dp[n-1]
print(result if result<inf else -1)
์ด๋ ค์ ๋ ์
์ฒ์์ dp[now]<w์ธ ๊ฒฝ์ฐ ์ฆ, ๊ฐฑ์ ์ ๊ฐ์ด ์ด๋ฏธ ๋ ์์ ๊ฒฝ์ฐ๋ฅผ continueํ์ง ์๊ณ ํ์๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๋๋ continue๋ฌธ์ ์ ์ ํ ํ์ฉํด์ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด ์ค์ํ ๋ฏ!!
'๐ปAlgorithm > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/๋ฐฑ์ค] 1074 Z - ํ์ด์ฌ (0) | 2021.09.17 |
---|---|
[BOJ/๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด - ํ์ด์ฌ (0) | 2021.09.15 |
[BOJ/๋ฐฑ์ค] 13302 ๋ฆฌ์กฐํธ - ํ์ด์ฌ (0) | 2021.08.25 |
[BOJ/๋ฐฑ์ค] 20923 ์ซ์ ํ ๋ฆฌ๊ฐ๋ฆฌ ๊ฒ์ - ํ์ด์ฌ (0) | 2021.08.24 |
[BOJ/๋ฐฑ์ค] 11582๋ฒ ํ์ด์ฌ - ์นํจ TOP N (0) | 2021.07.25 |