728x90
반응형
https://www.acmicpc.net/problem/1504
Python
from collections import deque
import sys
input = sys.stdin.readline
n, e = map(int, input().split())
edges = [[] for _ in range(n+1)]
for _ in range(e):
a, b, c = map(int, input().split())
edges[a].append((b, c))
edges[b].append((a, c))
v1, v2 = map(int, input().split())
def bfs(start, end):
global edges, n
if start == end:
return 0
d = [-1]*(n+1)
d[start] = 0
q = deque([start])
while q:
i = q.popleft()
if i != end:
for e in edges[i]:
if d[e[0]] == -1 or d[e[0]] > d[i]+e[1]:
d[e[0]] = d[i]+e[1]
q.append(e[0])
#print(d, i, e)
if d[end] == -1: # False로 해두니 총합 0일 때와 False를 구분 못 하기에 -1로
return -1
return d[end]
path12 = [bfs(1, v1), bfs(v1, v2), bfs(v2, n)]
path21 = [bfs(1, v2), bfs(v2, v1), bfs(v1, n)]
if -1 in path12 and -1 in path21:
print(-1)
elif -1 in path12:
print(sum(path21))
elif -1 in path21:
print(sum(path12))
else:
print(min(sum(path12), sum(path21)))
728x90
반응형
'Algorithm Problems' 카테고리의 다른 글
[백준][Python] 1916번 최소비용 구하기 - 그래프, 다익스트라 (0) | 2021.08.23 |
---|---|
[백준][Python] 1753번 최단경로 - 그래프, 최소힙 (0) | 2021.08.23 |
[백준][Python] 1931번 회의실 배정 - DP (0) | 2021.08.16 |
[백준][Python] 1043번 거짓말 - 그래프, DFS (0) | 2021.08.12 |
[Python] 원형 큐 사용 방법 (0) | 2021.08.05 |