코드
import sys
input = sys.stdin.readline
INF = 987654321
v,e = map(int, input().split())
graph = [[INF]*(v+1) for _ in range(v+1)]
for _ in range(e):
x,y,z = map(int, input().split())
graph[x][y] = z
def floyd(): # 플로이드 워셜 알고리즘
for i in range(1,v+1):
for j in range(1,v+1):
for k in range(1,v+1):
# 자기 자신에게 돌아오는 사이클을 찾아야하므로 j==k일 때 넘겨주는 코드 생략
graph[j][k] = min(graph[j][k], graph[j][i]+graph[i][k])
floyd()
route = INF
for i in range(1,v+1):
if graph[i][i] != INF:
route = min(route, graph[i][i])
print(-1) if route == INF else print(route)
pypy로 제출해야 통과할 수 있다.
'백준' 카테고리의 다른 글
[백준] 2206번 벽 부수고 이동하기 파이썬 코드 (0) | 2023.12.27 |
---|---|
[백준] 10282번 해킹 파이썬 코드 (0) | 2023.12.27 |
[백준] 2665번 미로만들기 파이썬 코드 (1) | 2023.12.20 |
[백준] 14284번 간선 이어가기 2 파이썬 코드 (1) | 2023.12.20 |
[백준] 1865번 웜홀 파이썬 코드 (1) | 2023.12.20 |
코드
import sys
input = sys.stdin.readline
INF = 987654321
v,e = map(int, input().split())
graph = [[INF]*(v+1) for _ in range(v+1)]
for _ in range(e):
x,y,z = map(int, input().split())
graph[x][y] = z
def floyd(): # 플로이드 워셜 알고리즘
for i in range(1,v+1):
for j in range(1,v+1):
for k in range(1,v+1):
# 자기 자신에게 돌아오는 사이클을 찾아야하므로 j==k일 때 넘겨주는 코드 생략
graph[j][k] = min(graph[j][k], graph[j][i]+graph[i][k])
floyd()
route = INF
for i in range(1,v+1):
if graph[i][i] != INF:
route = min(route, graph[i][i])
print(-1) if route == INF else print(route)
pypy로 제출해야 통과할 수 있다.
'백준' 카테고리의 다른 글
[백준] 2206번 벽 부수고 이동하기 파이썬 코드 (0) | 2023.12.27 |
---|---|
[백준] 10282번 해킹 파이썬 코드 (0) | 2023.12.27 |
[백준] 2665번 미로만들기 파이썬 코드 (1) | 2023.12.20 |
[백준] 14284번 간선 이어가기 2 파이썬 코드 (1) | 2023.12.20 |
[백준] 1865번 웜홀 파이썬 코드 (1) | 2023.12.20 |