λ¬Έμ
Nκ°μ λμκ° μλ€. κ·Έλ¦¬κ³ ν λμμμ μΆλ°νμ¬ λ€λ₯Έ λμμ λμ°©νλ λ²μ€κ° Mκ° μλ€. κ° λ²μ€λ A, B, Cλ‘ λνλΌ μ μλλ°, Aλ μμλμ, Bλ λμ°©λμ, Cλ λ²μ€λ₯Ό νκ³ μ΄λνλλ° κ±Έλ¦¬λ μκ°μ΄λ€. μκ° Cκ° μμκ° μλ κ²½μ°κ° μλ€. C = 0μΈ κ²½μ°λ μκ° μ΄λμ νλ κ²½μ°, C < 0μΈ κ²½μ°λ νμλ¨Έμ μΌλ‘ μκ°μ λλμκ°λ κ²½μ°μ΄λ€.
1λ² λμμμ μΆλ°ν΄μ λλ¨Έμ§ λμλ‘ κ°λ κ°μ₯ λΉ λ₯Έ μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ λμμ κ°μ N (1 ≤ N ≤ 500), λ²μ€ λ Έμ μ κ°μ M (1 ≤ M ≤ 6,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Mκ°μ μ€μλ λ²μ€ λ Έμ μ μ 보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)κ° μ£Όμ΄μ§λ€.
μΆλ ₯
λ§μ½ 1λ² λμμμ μΆλ°ν΄ μ΄λ€ λμλ‘ κ°λ κ³Όμ μμ μκ°μ 무νν μ€λ μ μΌλ‘ λλ릴 μ μλ€λ©΄ 첫째 μ€μ -1μ μΆλ ₯νλ€. κ·Έλ μ§ μλ€λ©΄ N-1κ° μ€μ κ±Έμ³ κ° μ€μ 1λ² λμμμ μΆλ°ν΄ 2λ² λμ, 3λ² λμ, ..., Nλ² λμλ‘ κ°λ κ°μ₯ λΉ λ₯Έ μκ°μ μμλλ‘ μΆλ ₯νλ€. λ§μ½ ν΄λΉ λμλ‘ κ°λ κ²½λ‘κ° μλ€λ©΄ λμ -1μ μΆλ ₯νλ€.
λ¬Έμ νμ΄
import sys
from collections import deque
n,m=map(int, sys.stdin.readline().split(' '))
route=[]
for _ in range(m):
a,b,c=map(int, sys.stdin.readline().split(' '))
route.append((a,b,c))
dist=[1e9]*(n+1)
dist[1]=0
for v in range(n):
for s,e,w in route:
if dist[s]!=1e9 and dist[e]>dist[s]+w:
if v==n-1:
print(-1)
sys.exit(0)
dist[e]=dist[s]+w
for d in dist[2:n+1]:
if d!=1e9:
print(d)
else:
print(-1)
ν μ μ μμ μΆλ°ν΄μ λͺ¨λ λ€λ₯Έ μ μ μ λν μ΅λ¨ κ²½λ‘λ₯Ό νμν μ μλ λ²¨λ§ ν¬λ(Bellman-Ford) μκ³ λ¦¬μ¦μ μ¬μ©νλ€.
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦κ³Ό λ¬λ¦¬ μμ κ°μ€μΉλ₯Ό ν¬ν¨ν΄μ μ΅λ¨ κ²½λ‘λ₯Ό νμν μ μλ€λ μ μμ λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ΄ μλ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μ¬μ©ν΄μΌ νλ€.
(κ°μ€μΉκ° μλ κ·Έλνμ μ΅λ¨ κ²½λ‘λ₯Ό νμνλ μκ³ λ¦¬μ¦μΈ λ€μ΅μ€νΈλΌ, νλ‘μ΄λ μμ , λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μ°¨μ΄μ κ³Ό μ¬μ©ν΄μΌ νλ κ²½μ°λ μΆν λ°λ‘ ν¬μ€ν ν μμ μ΄λ€.)
λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μμ μ¬μ΄ν΄μ΄ μκ³ , μ μ μ΄ Vκ°μΈ κ·Έλνμμ μ΅λ¨ κ²½λ‘λ λ§μλ΄μΌ V-1κ°μ κ°μ μ μ§λλ€λ μκ°μμ μΆλ°νλ€.
λ°λΌμ, λͺ¨λ μ μ μ λν΄μ V-1λ²μ λ°λ³΅μ ν΅ν΄ κ°λ₯ν λͺ¨λ κ²½λ‘λ₯Ό νμν΄μ μ νν λ΅μ λΈλ€. (μ¬κΈ°μ V-1λ² λ°λ³΅μ ν λ μ΄λ―Έ ν λ² κ³μ°λ μ μ μ λν΄μλ§ λ°λ³΅νλ€. μ²μ μμν λ μμ λ ΈλμΈ 1λ² λ Έλμ μ΅λ¨ κ²½λ‘λ₯Ό 0μΌλ‘ μ΄κΈ°νν΄μ£Όλ μ΄μ μ΄κΈ°λ νλ€.)
μ°μ route λ°°μ΄μ λͺ¨λ κ°μ μ μ 보λ₯Ό (μΆλ°μ§, λμ°©μ§, κ°μ€μΉ) ννλ‘ μ μ₯νλ€.
κ·Έλ¦¬κ³ 1λ²μμ λͺ¨λ λ Έλλ‘ κ°λ μ΅λ¨ κ²½λ‘λ₯Ό μ μ₯νλ dist λ°°μ΄μ 1e9λ‘ μ΄κΈ°ννκ³ , μΆλ° λ ΈλμΈ 1λ² λ Έλμ μ΅λ¨ κ²½λ‘λ 0μΌλ‘ μ΄κΈ°ννλ€.
for v in range(n):
for s,e,w in route:
if dist[s]!=1e9 and dist[e]>dist[s]+w:
if v==n-1:
print(-1)
sys.exit(0)
dist[e]=dist[s]+w
V-1λ² λ°λ³΅νλ©΄μ λͺ¨λ κ°μ μ νμνλ€. dist[s] μ¦, μμ λ Έλ 1λ²λΆν° νμ¬ κ°μ μ΄ λνλ΄λ μμμ κΉμ§μ μ΅λ¨ κ²½λ‘κ° ν λ² κ³μ°λ κ²½μ°μΈμ§ νμΈνκ³ (dist[s]!=1e9), dist[e] μ¦, μμ λ Έλ 1λ²λΆν° νμ¬ κ°μ μ΄ λνλ΄λ λμ°©μ κΉμ§μ μ΅λ¨ κ²½λ‘κ° sλ² λ Έλλ₯Ό ν λ² κ±°μ³μ eλ² λ ΈλκΉμ§ κ°λ κ²½λ‘λ³΄λ€ ν° κ²½μ°μ dist[e] κ°μ κ°±μ ν΄μ€λ€.
μ¬κΈ°μ, μμ μ¬μ΄ν΄μ μ°ΎκΈ° μν΄μ λ°λ³΅μ V-1λ² μλλΌ Vλ² λ°λ³΅νλλ°, μ¬κΈ°μ Vλ²μ§Έ λ°λ³΅μ ν λ κ°μ΄ κ°±μ λλ κ²½μ°μ μμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ€λ λ»μ΄λ―λ‘ -1μ μΆλ ₯νκ³ νλ‘κ·Έλ¨μ μ’ λ£νλ€.
μ΄λ κ² V-1λ² λͺ¨λ κ°μ μ νμν΄μ μ΅λ¨ κ²½λ‘λ₯Ό κ°±μ ν΄μ£Όλ©΄ μμ λ ΈλλΆν° λͺ¨λ λ ΈλκΉμ§ κ°λ μ΅λ¨ κ²½λ‘λ₯Ό dist λ°°μ΄μ μ μ₯ν μ μλ€.
μΆλ ₯μ ν΄μ€ λλ distκ°μ΄ 1e9μΈ κ²½μ°μ ν΄λΉ λ Έλλ‘ κ° μ μλ κ²½λ‘κ° μλ€λ λ»μ΄κΈ° λλ¬Έμ -1μ μΆλ ₯ν΄μ£Όκ³ , κ·Έλ μ§ μμ κ²½μ°μ dist κ°μ μΆλ ₯ν΄μ€λ€.
'μκ³ λ¦¬μ¦ > κ·Έλν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 1956 π₯] μ΄λ (0) | 2023.07.27 |
---|---|
[λ°±μ€ 15681 π₯] νΈλ¦¬μ 쿼리 (0) | 2023.07.16 |
[λ°±μ€ 11404 π₯] νλ‘μ΄λ (0) | 2023.07.13 |
[λ°±μ€ 11964 π₯] Fruit Feast (0) | 2023.07.13 |
[λ°±μ€ 7576 π₯] ν λ§ν (0) | 2023.07.12 |