โ๋ฌธ์
https://www.acmicpc.net/problem/11657
๋ฉ๋ชจ๋ฆฌ: 34456 KB, ์๊ฐ: 788 ms
๊ทธ๋ํ ์ด๋ก , ์ต๋จ ๊ฒฝ๋ก, ๋ฒจ๋ง–ํฌ๋
N๊ฐ์ ๋์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋์์ ๋์ฐฉํ๋ ๋ฒ์ค๊ฐ M๊ฐ ์๋ค. ๊ฐ ๋ฒ์ค๋ A, B, C๋ก ๋ํ๋ผ ์ ์๋๋ฐ, A๋ ์์๋์, B๋ ๋์ฐฉ๋์, C๋ ๋ฒ์ค๋ฅผ ํ๊ณ ์ด๋ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด๋ค. ์๊ฐ C๊ฐ ์์๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. C = 0์ธ ๊ฒฝ์ฐ๋ ์๊ฐ ์ด๋์ ํ๋ ๊ฒฝ์ฐ, C < 0์ธ ๊ฒฝ์ฐ๋ ํ์๋จธ์ ์ผ๋ก ์๊ฐ์ ๋๋์๊ฐ๋ ๊ฒฝ์ฐ์ด๋ค.
1๋ฒ ๋์์์ ์ถ๋ฐํด์ ๋๋จธ์ง ๋์๋ก ๊ฐ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โ๐ปํ์ด
๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค. ์ฌ์ดํด์ ํ์ธ์ ์๋ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
https://growth-coder.tistory.com/206
[๋ฐฑ์ค 11657][ํ์ด์ฌ] ํ์ ๋จธ์ (๋ฒจ๋ง ํฌ๋)
https://www.acmicpc.net/problem/11657 11657๋ฒ: ํ์๋จธ์ ์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N (1 ≤ N ≤ 500), ๋ฒ์ค ๋ ธ์ ์ ๊ฐ์ M (1 ≤ M ≤ 6,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ๋ฒ์ค ๋ ธ์ ์ ์ ๋ณด A, B, C (1 ≤ A, B
growth-coder.tistory.com
๐ป์ฝ๋
import sys
input = sys.stdin.readline
# ๋ฒจ๋ง ํฌ๋
# 1. ์ถ๋ฐ ๋
ธ๋ ์ค์
# 2. ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ ์ด๊ธฐํ
# 3. V - 1๋ฒ ๋ฐ๋ณต
# 1. ๋ชจ๋ ๊ฐ์ E๊ฐ๋ฅผ ํ๋์ฉ ํ์ธ.
# 2. ๊ฐ ๊ฐ์ ์ ๊ฑฐ์ณ ๋ค๋ฅธ ๋
ธ๋๋ก ๊ฐ๋ ๋น์ฉ์ ๊ณ์ฐํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ ๊ฐฑ์
# * ์์ ๊ฐ์ ์ํ์ด ๋ฐ์ํ๋์ง ์ฒดํฌํ๊ณ ์ถ๋ค๋ฉด 3๋ฒ ๊ณผ์ ํ ๋ฒ ๋ ์ํ.
N, M = map(int, input().split())
INF = 1e9
edges = [list(map(int, input().split())) for _ in range(M)]
dist = [0 if v == 0 else INF for v in range(N)]
def bellmanford(v):
for v in range(N):
for a, b, c in edges:
if dist[a-1] != INF and dist[b-1] > dist[a-1] + c:
dist[b-1] = dist[a-1] + c
if v == N-1:
print(-1)
return
for v in range(1, N):
print(dist[v] if dist[v] != INF else -1)
bellmanford(0)
๐ํ๊ธฐ
์ฌ์ดํด์ ์ด๋ป๊ฒ ํ์ธํด์ผ ํ๋์ง๊ฐ ์ด๋ ค์ ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ 93%์์ ํ๋ ค์ ๋ญ๊ฐ ๋ฌธ์ ์ด์ง ํ๋๋ฐ ์์ ์ ์ ์ ๋นผ๊ณ ํ์๋ค...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9655. ๋ ๊ฒ์/Python - Silver5 (1) | 2025.08.11 |
---|---|
[๋ฐฑ์ค] 2630. ์์ข ์ด ๋ง๋ค๊ธฐ/Python - Silver2 (0) | 2025.08.10 |
[๋ฐฑ์ค] 11404. ํ๋ก์ด๋/Python - Gold4 (0) | 2025.08.07 |
[๋ฐฑ์ค] 14500. ํ ํธ๋ก๋ฏธ๋ ธ/Python - Gold4 (2) | 2025.08.06 |
[๋ฐฑ์ค] 14502. ์ฐ๊ตฌ์/Python - Gold4 (0) | 2025.08.03 |