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
๋ฐ๋์ ํต๊ณผํด์ผ๋ง ํ๋ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์
1 -> v1 -> v2 -> n
1 -> v2 -> v1 -> n
๋ค์ต์คํธ๋ผ๋ฅผ ์ธ๋ฒ(1๋ฒ ์ถ๋ฐ, v1 ์ถ๋ฐ, v2 ์ถ๋ฐ) ๋๋ ค์ ๋ ๊ฐ ์ค์ ์ต์๊ฐ์ ์ฐพ์์ฃผ๋ฉด ๋๋ค
์ฒ์์ ์คํจํด์ ์ฐพ์๋ณด๋๊น ๊ฐ์ ์ธ๋ฒ ๋ํ๊ธฐ ๋๋ฌธ์ ๋ฌดํ๊ฐ์ ์ค์ฌ์ฃผ๋ฉด ๋๋ค๊ณ ํด์ ์ค์๋๋ฐ (1e9 -> 1e8)
์ฌ์ ํ ํ๋ฆผ,,,, ์์ธํ ๋ณด๋๊น ์ฝ๋์ ์คํ ์์๋ค ใ ^^ ๋ฉ์ฒญใ ,,
import heapq
import sys
input = sys.stdin.readline
INF = int(1e8)
n, e = map(int, input().split())
graph = [[] for i in range(n+1)]
for _ in range(e):
a, b, c = map(int, input().split())
graph[a].append((b, c))
graph[b].append((a, c))
v1, v2 = map(int, input().split())
def dijkstra(start):
distance = [INF] * (n + 1)
q = []
heapq.heappush(q, (0, start))
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
return distance
d1 = dijkstra(1)
d2 = dijkstra(v1)
d3 = dijkstra(v2)
res = min(d1[v1] + d2[v2] + d3[n], d1[v2] + d3[v1] + d2[n])
if res >= INF:
print(-1)
else:
print(res)
'๐ค > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1717: ์งํฉ์ ํํ (Python) (0) | 2022.07.28 |
---|---|
๋ฐฑ์ค 11657: ํ์๋จธ์ (Python) (0) | 2022.07.18 |
๋ฐฑ์ค 1753: ์ต๋จ๊ฒฝ๋ก (Python) (0) | 2022.07.12 |
๋ฐฑ์ค 12865: ํ๋ฒํ ๋ฐฐ๋ญ (Python) (0) | 2022.04.11 |
๋ฐฑ์ค 1912: ์ฐ์ํฉ (Python) (0) | 2022.04.08 |