본문 바로가기

BOJ

[BOJ][Python] 백준 1504번 - 특정한 최단 경로

728x90

문제 링크: https://www.acmicpc.net/problem/1504

 

1504번: 특정한 최단 경로

첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존

www.acmicpc.net

 


문제 풀이

N이 800개여서 플로이드로 풀려 했다. O($N^{3}$)으로 되는줄 알았는데 시간 초과가 났다. 그래서 그냥 다익스트라로 풀었다.

s → v1 → v2 → e 혹은 s → v2 → v1 → e 중에서 짧은 거리를 출력해주면 된다.

s → v1, s → v2 의 거리를 구할 때 다익스트라 1번,

v1 → v2(= v2 → v1), v1(혹은 v2) → e 의 거리를 구할 때 다익스트라 1번,

위에서 v1 → e 를 구했다면 v2 → e 의 거리를 구할 때 다익스트라 1번으로 총 3번 써야한다.

만약 둘다 INF가 뜬다면 최단거리가 없으므로 -1을 출력해야 한다.

 

코드

728x90