너무나 명백하게 플로이드 워셜을 쓰라고 문제에 주어졌다.
플로이드 워셜을 통해 거리배열을 얻어내고
치킨집 2마리를 조합으로 묶어내면서 각 거리의 합을 미니멈으로 비교하는 문제이다.
인접리스트를 사랑하는 입장에서 인접행렬문제는 늘 까다롭다.
아직 코드가 손에 안익어서 그럴수도..
import sys
input = sys.stdin.readline
N,M = map(int,input().split())
graph = [[float('inf') for _ in range(N)] for _ in range(N)]
for i in range(M):
a,b = map(int,input().split())
graph[a-1][b-1] = 2
graph[b-1][a-1] = 2
for i in range(N):
graph[i][i] = 0
for k in range(N):
for i in range(N):
for j in range(N):
if graph[i][j] >graph[i][k] + graph[k][j]:
graph[i][j] = graph[i][k] + graph[k][j]
max_time = float('inf')
for i in range(N-1):
for j in range(i,N):
chicken1 = i
chicken2 = j
sum_time = 0
for building in range(N):
sum_time += min(graph[building][chicken1],graph[building][chicken2])
if max_time > sum_time:
max_time = sum_time
max_chicken1 = chicken1
max_chicken2 = chicken2
print(max_chicken1+1, max_chicken2+1, max_time)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 11049 행렬곱셈순서. (0) | 2021.07.25 |
---|---|
[백준][Python] 14888 연산자 끼워넣기 (0) | 2021.07.25 |
[백준][Python] 2633 음악프로그램 (1) | 2021.07.25 |
[백준][Python] 2458 키순서 (0) | 2021.07.24 |
[백준][Python] 11054 가장 긴 바이토닉 부분수열. (0) | 2021.07.24 |