February 11, 2020
μκ° μ ν | λ©λͺ¨λ¦¬ μ ν |
---|---|
1μ΄ | 256MB |
n(1 β€ n β€ 100)κ°μ λμκ° μλ€. κ·Έλ¦¬κ³ ν λμμμ μΆλ°νμ¬ λ€λ₯Έ λμμ λμ°©νλ m(1 β€ m β€ 100,000)κ°μ λ²μ€κ° μλ€. κ° λ²μ€λ ν λ² μ¬μ©ν λ νμν λΉμ©μ΄ μλ€. λͺ¨λ λμμ μ (A, B)μ λν΄μ λμ Aμμ Bλ‘ κ°λλ° νμν λΉμ©μ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
첫째 μ€μ λμμ κ°μ n(1 β€ n β€ 100)μ΄ μ£Όμ΄μ§κ³ λμ§Έ μ€μλ λ²μ€μ κ°μ m(1 β€ m β€ 100,000)μ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ μ§Έ μ€λΆν° m+2μ€κΉμ§ λ€μκ³Ό κ°μ λ²μ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. λ¨Όμ μ²μμλ κ·Έ λ²μ€μ μΆλ° λμμ λ²νΈκ° μ£Όμ΄μ§λ€. λ²μ€μ μ 보λ λ²μ€μ μμ λμ a, λμ°© λμ b, ν λ² νλλ° νμν λΉμ© cλ‘ μ΄λ£¨μ΄μ Έ μλ€. μμ λμμ λμ°© λμκ° κ°μ κ²½μ°λ μλ€. λΉμ©μ 100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. μμ λμμ λμ°© λμλ₯Ό μ°κ²°νλ λ Έμ μ νλκ° μλ μ μλ€.
Nκ°μ μ€μ μΆλ ₯ν΄μΌ νλ€.
iλ²μ§Έ μ€μ μΆλ ₯νλ jλ²μ§Έ μ«μλ λμ iμμ jλ‘ κ°λλ° νμν μ΅μ λΉμ©μ΄λ€.
λ§μ½, iμμ jλ‘ κ° μ μλ κ²½μ°μλ κ·Έ μ리μ 0μ μΆλ ₯νλ€.
5
14
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
3 5 10
3 1 8
1 4 2
5 1 7
3 4 2
5 2 4
0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0
μλμ μκ³ λ¦¬μ¦ λΆλ₯μ κ°μ΄ κ·Έλνμ νλ‘μ΄λ μμ
μκ³ λ¦¬μ¦μ μ¬μ©ν΄ ν΄κ²°ν μ μλ€.
κ·Έλνμ λͺ¨λ κ°μ μ λνμ¬ κ°λ₯ν λͺ¨λ κ²½λ‘λ₯Ό λΉκ΅νλ μκ³ λ¦¬μ¦ μ΄λ€.
νλ‘μ΄λ μμ
μκ³ λ¦¬μ¦μ μκ°λ³΅μ‘λλ V
κ°μ κ°μ μ λνμ¬ μ΄λ€.
λ κ°μ μ μ κ°μ μ΅λ¨ κ²½λ‘λ₯Ό μ΅μ μ΄ λ λ κΉμ§ κ°μ ν΄ μ΅λ¨ κ²½λ‘λ₯Ό μ°Ύλ μκ³ λ¦¬μ¦μ΄λ€.
νμ€ μ
μΆλ ₯ ν¨μμΈ input
μ μ¬μ©νμ§ μκ³ sys
μ import
ν΄ μ¬μ©νμλ€.
μ μ₯ν μ μλ κ°μ₯ ν° μ μλ₯Ό μ μ₯νκΈ° μν΄ INF
λ³μλ₯Ό μ μΈνκ³ sys.maxsize
λ₯Ό μ μ₯νλ€.
ν¬κΈ°μ κ·Έλνλ₯Ό INF
μ κ°μΌλ‘ μ΄κΈ°ν ν ν μ μ κ³Ό κ°μ μ 보 μ
λ ₯μ λ°μλ€.
λ¬Έμ μμ μμ λμμ λμ°© λμλ₯Ό μ°κ²°νλ λ
Έμ μ νλκ° μλ μ μλ€.λΌλ μ 보μ λ°λΌ
min
ν¨μλ₯Ό μ΄μ©ν΄ κΈ°μ‘΄ κ°κ³Ό λΉκ΅νμ¬ λ μ μ κ°μ ν΄λΉ κ°μ μ λΉμ©μΌλ‘ μ μ₯νλλ‘ νλ€.
import sys
input = sys.stdin.readline
INF = sys.maxsize
N = int(input())
M = int(input())
graph = [[INF for _ in range(N)] for _ in range(N)]
for _ in range(M):
a, b, c = map(int, input().split())
graph[a - 1][b - 1] = min(c, graph[a - 1][b - 1])
μ μ μ κ°―μλ§νΌ 3μ€ λ°λ³΅λ¬Έμ μ§ννλ€.
μΌλ¨ graph[i][i]
μ¦ μκΈ° μμ μμ μμ μ κ²½λ‘λ 0
μ΄κΈ° λλ¬Έμ 0
μΌλ‘ μ μ₯νλ€.
μ΄λ―Έ μ μ₯λμ΄ μλ λΉμ©κ³Ό μ μ i
λ₯Ό κ±°μ³μ μ μ k
λ‘ κ°λ μ΅μκ°μ μ°Ύμ μ μ₯νλ€.
for i in range(N):
graph[i][i] = 0
for i in range(N):
for j in range(N):
for k in range(N):
graph[j][k] = min(graph[j][k], graph[j][i] + graph[i][k])
μ΅μ λΉμ©μ΄ μ
λ°μ΄νΈ λλ κ²μ μΆλ ₯ν΄λ³΄λ©΄ μλμ κ°μ κ²°κ³Όκ° λμ¨λ€.
1
λ² μ μ μ ν΅νμ¬ κ° μ μλ λͺ¨λ κ²½μ°μ μ΅μκ°===================== Now i is 0 =====================
0 2 3 1 10
2147483647 0 2147483647 2 2147483647
8 10 0 1 1
2147483647 2147483647 2147483647 0 3
7 4 10 8 0
================== Updated Completed ==================
2
λ² μ μ μ ν΅νμ¬ κ° μ μλ λͺ¨λ κ²½μ°μ μ΅μκ°===================== Now i is 1 =====================
0 2 3 1 10
2147483647 0 2147483647 2 2147483647
8 10 0 1 1
2147483647 2147483647 2147483647 0 3
7 4 10 6 0
================== Updated Completed ==================
3
λ² μ μ μ ν΅νμ¬ κ° μ μλ λͺ¨λ κ²½μ°μ μ΅μκ°===================== Now i is 2 =====================
0 2 3 1 4
2147483647 0 2147483647 2 2147483647
8 10 0 1 1
2147483647 2147483647 2147483647 0 3
7 4 10 6 0
================== Updated Completed ==================
4
λ² μ μ μ ν΅νμ¬ κ° μ μλ λͺ¨λ κ²½μ°μ μ΅μκ°===================== Now i is 3 =====================
0 2 3 1 4
2147483647 0 2147483647 2 5
8 10 0 1 1
2147483647 2147483647 2147483647 0 3
7 4 10 6 0
================== Updated Completed ==================
5
λ² μ μ μ ν΅νμ¬ κ° μ μλ λͺ¨λ κ²½μ°μ μ΅μκ°===================== Now i is 4 =====================
0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0
================== Updated Completed ==================
λͺ¨λ μ μ μμ λ€λ₯Έ λͺ¨λ μ μ μμ λ°©λ¬Έν μ μλ λͺ¨λ μ΅μ κ²½λ‘λ₯Ό μ°Ύλ κ²μ λ³Ό μ μλ€.
κ²½λ‘μ λΉμ©μ΄ 0
μ΄κ±°λ INF
μΈ κ²½μ° 0
μ μΆλ ₯νκ³
κ·Έλ μ§ μμΌλ©΄ graph[i][j]
μ κ°μ κ·Έλ₯ μΆλ ₯ν΄μ£Όλ©΄ λλ λ¬Έμ λ€.
for i in range(N):
for j in range(N):
if graph[i][j] == 0 or graph[i][j] == INF:
print(0, end=" ")
else:
print(graph[i][j], end=" ")
print()
import sys
input = sys.stdin.readline
INF = sys.maxsize
N = int(input())
M = int(input())
graph = [[INF for _ in range(N)] for _ in range(N)]
for _ in range(M):
a, b, c = map(int, input().split())
graph[a - 1][b - 1] = min(c, graph[a - 1][b - 1])
for i in range(N):
graph[i][i] = 0
for i in range(N):
for j in range(N):
for k in range(N):
graph[j][k] = min(graph[j][k], graph[j][i] + graph[i][k])
for i in range(N):
for j in range(N):
if graph[i][j] == 0 or graph[i][j] == INF:
print(0, end=" ")
else:
print(graph[i][j], end=" ")
print()
μλ£κ΅¬μ‘°λ₯Ό λ°°μ΄μ§ κ·Έλ κ² μ€λ μκ°μ΄ μ§λμ§ μμμμλ κΈ°μ΅μ΄ μ λμ§ μμλ€.
λ€μ 리λ§μΈλνλ κ²Έν΄μ ν¬μ€ν
κ³Ό ν¨κ» λ¬Έμ λ₯Ό νμ΄λ³΄μλ€.
κΈ°λ³Έμ μΈ νλ‘μ΄λ μμ
μκ³ λ¦¬μ¦μ μ΄μ©ν΄ ν΄κ²°ν μ μλ λ¬Έμ μλ€.
β μ½λλ [μ¬κΈ°]μμ νμΈν μ μλ€.