โ๋ฌธ์
https://www.acmicpc.net/problem/1956
๋ฉ๋ชจ๋ฆฌ: 112760 KB, ์๊ฐ: 2168 ms
๊ทธ๋ํ ์ด๋ก , ์ต๋จ ๊ฒฝ๋ก, ํ๋ก์ด๋–์์
V๊ฐ์ ๋ง์์ E๊ฐ์ ๋๋ก๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋์๊ฐ ์๋ค. ๋๋ก๋ ๋ง์๊ณผ ๋ง์ ์ฌ์ด์ ๋์ฌ ์์ผ๋ฉฐ, ์ผ๋ฐฉ ํตํ ๋๋ก์ด๋ค. ๋ง์์๋ ํธ์์ 1๋ฒ๋ถํฐ V๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค๊ณ ํ์.
๋น์ ์ ๋๋ก๋ฅผ ๋ฐ๋ผ ์ด๋์ ํ๊ธฐ ์ํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ๋ค. ์ด๋์ ํ ํ์๋ ๋ค์ ์์์ ์ผ๋ก ๋์์ค๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ์ฌ์ดํด์ ์ฐพ๊ธฐ๋ฅผ ์ํ๋ค. ๋จ, ๋น์ ์ ์ด๋์ ๋งค์ฐ ๊ท์ฐฎ์ํ๋ฏ๋ก, ์ฌ์ดํด์ ์ด๋ฃจ๋ ๋๋ก์ ๊ธธ์ด์ ํฉ์ด ์ต์๊ฐ ๋๋๋ก ์ฐพ์ผ๋ ค๊ณ ํ๋ค.
๋๋ก์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋๋ก์ ๊ธธ์ด์ ํฉ์ด ๊ฐ์ฅ ์์ ์ฌ์ดํด์ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ ๋ง์์ ์๋ณตํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ดํด์ ํฌํจ๋จ์ ์ฃผ์ํ๋ค.
โ๐ปํ์ด
์ด ๋ฌธ์ ๋ ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํ๋ค.
๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐ์์ a์์ b๋ง์๊น์ง ๊ฐ๋ ๋๋ก์ ๊ธธ์ด๋ฅผ ๊ธฐ๋กํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ ์ ์ ์ ๊ฑฐ์ณ์ a์์ b๋ง์๊น์ง ๊ฐ๋ ์ต์ ๊ธธ์ด๋ฅผ ๊ธฐ๋กํ๋ค.
์ด ๋ฌธ์ ์์๋ ์์์ ์ผ๋ก ๋์์ค๋ ๊ฒ์ด ์ข๋ค๊ณ ํ์์ผ๋ฏ๋ก ์ฌ์ดํด์ ์ฐพ์์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ ์ ์์ ๋์ฐฉ ์ ์ ์ผ๋ก ๊ฐ๋ ๋๋ก ๊ธธ์ด์ ๋์ฐฉ ์ ์ ์์ ์์ ์ ์ ์ผ๋ก ๊ฐ๋ ๋๋ก์ ๊ธธ์ด๋ฅผ ํฉํ ๊ฐ์ด ์๋ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฉฐ ์ด ๋ ๊ฐ์ด INF ์ด์์ด๋ผ๋ฉด -1์ ์ถ๋ ฅํ๊ณ ์๋๋ผ๋ฉด ์ต์ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ป์ฝ๋
Floyd-Warshall Algorithms
import sys
input = sys.stdin.readline
INF = sys.maxsize
V, E = map(int, input().split())
board = [[INF if i != j else 0 for j in range(V)] for i in range(V)]
for _ in range(E):
a, b, c = map(int, input().split())
board[a-1][b-1] = c
for k in range(V):
for i in range(V):
for j in range(V):
board[i][j] = min(board[i][j], board[i][k] + board[k][j])
res = INF
for v in range(V):
for u in range(V):
if u!= v:
res = min(res, board[v][u] + board[u][v])
print(-1) if res >= INF else print(res)
๐ํ๊ธฐ
ํ์ฐธ์ ํ๋ค๊ฐ ์ ํ๋ ค์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์๋ณธ ํ ํ๋ก์ด๋ ์์ ๋ก ํ์ด์ ๋ง์ท๋ค. ์ฒ์์ ๊ณ์ ๋ค์ต์คํธ๋ผ๋ก ๋์ ํ๋๋ฐ ์ ๋ง ํ๋ก์ด๋ ์์ ๋ฐ์ ์ ๋๋ ๊ฑธ๊น...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 20040. ์ฌ์ดํด ๊ฒ์/Python - Gold4 (0) | 2025.09.10 |
---|---|
[๋ฐฑ์ค] 1976. ์ฌํ ๊ฐ์/Python - Gold4 (0) | 2025.08.18 |
[๋ฐฑ์ค] 1717. ์งํฉ์ ํํ/Python - Gold5 (0) | 2025.08.17 |
[๋ฐฑ์ค] 1197. ์ต์ ์คํจ๋ ํธ๋ฆฌ/Python - Gold4 (1) | 2025.08.16 |
[๋ฐฑ์ค] 13549. ์จ๋ฐ๊ผญ์ง3/Python - Gold5 (0) | 2025.08.15 |