https://www.acmicpc.net/problem/1956
SOLUTION
플로이드 워셜 알고리즘으로 풀 수 있다.
https://www.acmicpc.net/problem/11404 문제와 https://claude-u.tistory.com/334 해결법을 참조하자
해당 링크의 풀이법과 distance[i][i]만을 확인해주면 된다.
또한 시간 복잡도 때문에 pypy로 풀어야한다.
PYTHON CODE
import sys
V, E = map(int, input().split())
INF = 10000 * V + 1 #전체 사이클을 돌 경우 최댓값 +1
distance = [[INF for _ in range(V+1)] for _ in range(V+1)]
for _ in range(E):
start, end, dist = map(int, sys.stdin.readline().split())
distance[start][end] = dist
#플로이드 워셜 알고리즘
for k in range(1, V+1):
for i in range(1, V+1):
for j in range(1, V+1):
distance[i][j] = min(distance[i][j],
distance[i][k] + distance[k][j])
#가장 작은 사이클 찾는 for문
min_cycle = INF
for i in range(1, V+1):
min_cycle = min(min_cycle, distance[i][i])
if min_cycle == 10000 * V + 1: #사이클이 없을 경우
print(-1)
else:
print(min_cycle)
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#286 백준 파이썬 [1389] 케빈 베이컨의 6단계 법칙 - 플로이드 와샬 (0) | 2019.12.15 |
---|---|
#285 백준 파이썬 [11403] 경로 찾기 - 플로이드 와샬 (0) | 2019.12.15 |
#283 백준 파이썬 [11404] 플로이드 - 플로이드 와샬 (0) | 2019.12.14 |
#282 백준 파이썬 [2206] 벽 부수고 일어나기 - BFS (0) | 2019.12.13 |
#281 백준 파이썬 [16680] 안수빈수 (0) | 2019.12.13 |