λ¬Έμ
n(2 ≤ n ≤ 100)κ°μ λμκ° μλ€. κ·Έλ¦¬κ³ ν λμμμ μΆλ°νμ¬ λ€λ₯Έ λμμ λμ°©νλ m(1 ≤ m ≤ 100,000)κ°μ λ²μ€κ° μλ€. κ° λ²μ€λ ν λ² μ¬μ©ν λ νμν λΉμ©μ΄ μλ€.
λͺ¨λ λμμ μ (A, B)μ λν΄μ λμ Aμμ Bλ‘ κ°λλ° νμν λΉμ©μ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ λμμ κ°μ nμ΄ μ£Όμ΄μ§κ³ λμ§Έ μ€μλ λ²μ€μ κ°μ mμ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ μ§Έ μ€λΆν° m+2μ€κΉμ§ λ€μκ³Ό κ°μ λ²μ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. λ¨Όμ μ²μμλ κ·Έ λ²μ€μ μΆλ° λμμ λ²νΈκ° μ£Όμ΄μ§λ€. λ²μ€μ μ 보λ λ²μ€μ μμ λμ a, λμ°© λμ b, ν λ² νλλ° νμν λΉμ© cλ‘ μ΄λ£¨μ΄μ Έ μλ€. μμ λμμ λμ°© λμκ° κ°μ κ²½μ°λ μλ€. λΉμ©μ 100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
μμ λμμ λμ°© λμλ₯Ό μ°κ²°νλ λ Έμ μ νλκ° μλ μ μλ€.
μΆλ ₯
nκ°μ μ€μ μΆλ ₯ν΄μΌ νλ€. iλ²μ§Έ μ€μ μΆλ ₯νλ jλ²μ§Έ μ«μλ λμ iμμ jλ‘ κ°λλ° νμν μ΅μ λΉμ©μ΄λ€. λ§μ½, iμμ jλ‘ κ° μ μλ κ²½μ°μλ κ·Έ μ리μ 0μ μΆλ ₯νλ€.
λ¬Έμ νμ΄
import sys
n=int(sys.stdin.readline())
m=int(sys.stdin.readline())
minimum=[[1e9]*(n+1) for _ in range(n+1)]
for _ in range(m):
a,b,c=map(int, sys.stdin.readline().split(' '))
# μ΄λ―Έ μ μ₯λ κ²½λ‘κ° μλ κ²½μ°, λ μμ κ²½λ‘λ₯Ό μ μ₯
if minimum[a][b]!=1e9:
minimum[a][b]=min(c, minimum[a][b])
else:
minimum[a][b]=c
for i in range(1,n+1):
minimum[i][i]=0
# 1~nκΉμ§ κ²½μ μ μ€μ ν΄μ£Όλ©΄μ μ΅μκ° νμ
for k in range(1,n+1):
for i in range(1,n+1):
for j in range(1, n+1):
minimum[i][j]=min(minimum[i][j], minimum[i][k]+minimum[k][j])
for i in range(1,n+1):
for j in range(1, n+1):
# λλ¬ν μ μλ κ²½λ‘κ° μλ κ²½μ°
if minimum[i][j]==1e9:
print(0, end=' ')
else:
print(minimum[i][j], end=' ')
print('')
λͺ¨λ λ Έλκ°μ μ΅λ¨ κ²½λ‘λ₯Ό ꡬνλ λ°μ μ°μ΄λ νλ‘μ΄λ μμ (Floyd-Warshall) μκ³ λ¦¬μ¦μ μ¬μ©ν΄μΌ νλ λ¬Έμ μ΄λ€.
μ²μμ μ΅λ¨κ²½λ‘λ₯Ό μ μ₯νλ 2μ°¨μ λ°°μ΄ minimumμ INF κ°μΌλ‘ μ΄κΈ°ννκ³ , κ°μ μ κ°μ Mλ§νΌ μΆλ°μ§(a), λμ°©μ§(b), μμμκ°(c)λ₯Ό μ λ ₯λ°μμ minumum[a][b]=c νμμΌλ‘ κ°μ μ 보λ₯Ό μ μ₯νλ€. μ΄λ, λμΌν κ²½λ‘μ λν΄μ μ¬λ¬ κ°μ λ Έμ μ΄ μ‘΄μ¬ν μ μκ³ , μ°λ¦¬λ μ΅λ¨ κ²½λ‘λ₯Ό ꡬν΄μΌ νκΈ° λλ¬Έμ μ΄λ―Έ λ€λ₯Έ λ Έμ μ΄ μ‘΄μ¬νλ κ²½μ° λ μμ κ°μ μ μ₯νλ€.
κ·Έλ¦¬κ³ μΆλ°μ§μ λμ°©μ§κ° κ°μ minimum[i][i]λ 0μΌλ‘ μ΄κΈ°νν΄μ€λ€.
for k in range(1,n+1):
for i in range(1,n+1):
for j in range(1, n+1):
minimum[i][j]=min(minimum[i][j], minimum[i][k]+minimum[k][j])
1λ²λΆν° nλ²κΉμ§ λͺ¨λ ν λ²μ© μ€κ° λ Έλ μ¦, κ²½μ μ§λ‘ μ ννλ©΄μ κΈ°μ‘΄μ κ²½λ‘λ³΄λ€ ν΄λΉ κ²½μ μ§λ₯Ό λ€λ Έλ€ κ°λ κ²μ΄ λ μ§§μ κ²½μ° κ²½λ‘λ₯Ό κ°±μ ν΄μ€λ€.
μ΄λ κ² νλ©΄ minimum[i][j]μ iμμ jλ‘ κ°λ μ΅λ¨ κ²½λ‘κ° μ μ₯λλ€!
μΆλ ₯νλ κ³Όμ μμ minimum[i][j]κ° 1e9μΈ κ²½μ°μ ν΄λΉ κ²½λ‘κ° μλ€λ λ»μ΄λ―λ‘ 0μ μΆλ ₯ν΄μ€λ€.
λ¨, μκ°λ³΅μ‘λ O(n^3)μ΄λ―λ‘, ν΄λΉ μκ°λ³΅μ‘λλ₯Ό λ§μ‘±ν μ μλ κ²½μ°μλ§ μ¬μ©ν μ μλ€.
'μκ³ λ¦¬μ¦ > κ·Έλν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 15681 π₯] νΈλ¦¬μ 쿼리 (0) | 2023.07.16 |
---|---|
[λ°±μ€ 11657 π₯] νμλ¨Έμ (0) | 2023.07.13 |
[λ°±μ€ 11964 π₯] Fruit Feast (0) | 2023.07.13 |
[λ°±μ€ 7576 π₯] ν λ§ν (0) | 2023.07.12 |
[λ°±μ€ 14466 π₯] μκ° κΈΈμ 건λκ° μ΄μ 6 (0) | 2023.07.11 |