~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/18352
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ
- distance : X๋ก๋ถํฐ ๊ฐ ๋ ธ๋์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก. ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด ๋ฌดํ์(INF)
- graph : ๊ฐ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ์ ๋ณด (์ฐ๊ฒฐ ๋ฆฌ์คํธ)
- q : ์ง๊ธ๊น์ง ๊ณ์ฐ ๋ ๊ฑฐ๋ฆฌ ์ค ๊ฐ์ ์ด ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ตฌํ๊ธฐ ์ํ ์ฐ์ ์์ ํ(Priority Queue)
์์ธํ ์ค๋ช ์ ์ฃผ์์ ์ฐธ๊ณ ๋ฐ๋๋๋ค
์์ฑ ์ฝ๋
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
N, M, K, X = map(int, input().split()) # ๋
ธ๋์, ๊ฐ์ ์, ๋ชฉํ ๊ฑฐ๋ฆฌ, ์์ ๋
ธ๋
graph = [[] for _ in range(N+1)] # ์ฐ๊ฒฐ ๋ฆฌ์คํธ
distance = [INF]*(N+1) # X๋ก๋ถํฐ ๊ฐ ๋
ธ๋ ์ต์ ๊ฑฐ๋ฆฌ, ๋ฌดํ์๋ก ์ด๊ธฐํ
# ๊ฐ ๊ฐ์ ์ฐ๊ฒฐ
for _ in range(M):
a, b = map(int, input().split())
graph[a].append(b)
def dijkstra(start):
q = []
distance[start] = 0 # start ๋
ธ๋ ๊ฑฐ๋ฆฌ ์ด๊ธฐํ
heapq.heappush(q, (0, start)) # ์ฐ์ ์์ ํ์ (๊ฑฐ๋ฆฌ, ์์ ๋
ธ๋) ์ฝ์
while q: # ํ์ ๊ฐ์ด ์์ ๋์
dist, now = heapq.heappop(q) # ์ฐ์ ์์ ํ์ ์กด์ฌํ๋ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋
ธ๋
if distance[now] < dist: # ๋ฐฉ๋ฌธํ ๋
ธ๋
continue
for i in graph[now]: # now๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋
cost = 1 + dist # 1 + now๋
ธ๋์ ์ต์ ๊ฑฐ๋ฆฌ
if cost < distance[i]: # now -> i ๊ฑฐ๋ฆฌ๊ฐ ์๋ค๋ฉด
distance[i] = cost # ์
๋ฐ์ดํธ
heapq.heappush(q, (cost, i)) # ์ฐ์ ์์ ํ ์ฝ์
dijkstra(X) # ์คํ ํ X๋ก๋ถํฐ ๊ฐ ๋
ธ๋๊ฐ ๋จ์ด์ง ์ต์ ๊ฑฐ๋ฆฌ distance ์์ฑ ์๋ฃ
flag = False # K์ ์ผ์นํ๋ ๊ฑฐ๋ฆฌ๊ฐ ์๋์ง ํ๋จ
for i in range(1, N+1):
if distance[i] == K:
flag = True # ์ผ์น ํ๋ ๊ฒ ์กด์ฌ
print(i)
if not flag: # ์ผ์นํ๋ ๊ฒ ์กด์ฌํ์ง ์์
print(-1)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 1916 ์ต์๋น์ฉ ๊ตฌํ๊ธฐ | ๋ค์ต์คํธ๋ผ | ์๊ฐ์ด๊ณผ (0) | 2023.05.17 |
---|---|
[Python] ๋ฐฑ์ค 11404 ํ๋ก์ด๋ | ํ๋ก์ด๋ ์์ (0) | 2023.05.16 |
[Python] ๋ฐฑ์ค 1753 ์ต๋จ ๊ฒฝ๋ก | ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.16 |
[Python] ๋ฐฑ์ค 1463 1๋ก ๋ง๋ค๊ธฐ | DP (0) | 2023.05.15 |
[Python] ๋ฐฑ์ค 9663 N-Queen | ์๊ฐ์ด๊ณผ (2) | 2023.04.18 |