[BOJ][๐ก4][๋ฐฑ์ค#01504] ํน์ ํ ์ต๋จ ๊ฒฝ๋ก
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ค. ์ธ์ค์ด๋ 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ต๋จ ๊ฑฐ๋ฆฌ๋ก ์ด๋ํ๋ ค๊ณ ํ๋ค. ๋ํ ์ธ์ค์ด๋ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์ ์ด๋ํ๋ ํน์ ํ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ณ ์ถ์๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก ์์๋ก ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ํต๊ณผํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ธ์ค์ด๋ ํ๋ฒ ์ด๋ํ๋ ์ ์ ์ ๋ฌผ๋ก , ํ๋ฒ ์ด๋ํ๋ ๊ฐ์ ๋ ๋ค์ ์ด๋ํ ์ ์๋ค. ํ์ง๋ง ๋ฐ๋์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํด์ผ ํ๋ค๋ ์ฌ์ค์ ์ฃผ์ํ๋ผ. 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ด๋ํ ๋, ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ๊ฑฐ์น๋ฉด์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ์ฃผ์ด์ง๋ค. (2 โค N โค 800, 0 โค E โค 200,000) ๋์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ์ ์ธ ๊ฐ์ ์ ์ a, b, c๊ฐ ์ฃผ์ด์ง๋๋ฐ, a๋ฒ ์ ์ ์์ b๋ฒ ์ ์ ๊น์ง ์๋ฐฉํฅ ๊ธธ์ด ์กด์ฌํ๋ฉฐ, ๊ทธ ๊ฑฐ๋ฆฌ๊ฐ c๋ผ๋ ๋ป์ด๋ค. (1 โค c โค 1,000) ๋ค์ ์ค์๋ ๋ฐ๋์ ๊ฑฐ์ณ์ผ ํ๋ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ ์ ๋ฒํธ v1๊ณผ v2๊ฐ ์ฃผ์ด์ง๋ค. (v1 โ v2, v1 โ N,ย v2 โ 1) ์์์ ๋ ์ ์ u์ v์ฌ์ด์๋ ๊ฐ์ ์ด ์ต๋ 1๊ฐ ์กด์ฌํ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ๊ฐ์ ์ ์ ์ ์ง๋๋ ์ต๋จ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฌํ ๊ฒฝ๋ก๊ฐ ์์ ๋์๋ -1์ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
4 6
1 2 3
2 3 3
3 4 1
1 3 5
2 4 5
1 4 4
2 3
์ถ๋ ฅ
7
My Sol
import sys
input = sys.stdin.readline
from heapq import heappop, heappush
from math import inf
def dijk(S, E):
global G
visit = [0]*(V+1)
D = [inf]*(V+1)
D[S] = 0
Q = [(D[S], S)]
while Q:
val, u = heappop(Q)
if visit[u]: continue
visit[u] = 1
for v, w in G[u]:
if not visit[v] and D[v] > D[u] + w:
D[v] = D[u] + w
heappush(Q, (D[v], v))
return -1 if D[E] == inf else D[E]
def main(S, A, B, T):
R1 = dijk(S, A)
if R1==-1: return -1
R2 = dijk(A, B)
if R2==-1: return -1
R3 = dijk(B, T)
if R3==-1: return -1
return R1+R2+R3
V, E = map(int, input().split())
G = [[] for _ in range(V+1)]
for _ in range(E):
u, v, w = map(int, input().split())
G[u].append((v, w))
G[v].append((u, w))
C1, C2 = map(int, input().split())
ret1 = main(1, C1, C2, V)
ret2 = main(1, C2, C1, V)
ret3 = {ret1, ret2} - {-1}
print(min(ret3) if ret3 else -1)
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ณํํ ๋ฐฉ์์ด๋ค. ๋ฐ๋์ ์ง๋์ผํ๋ ๋ ์ ์ ์ C1๊ณผ C2๋ก ์ ์ฅํ๊ณ , ์ด 3๋ฒ์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ 1๋ฒ ์ ์ ๋ถํฐ V๋ฒ ์ ์ ๊น์ง ๋๋ฌํ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ค. ์ด๋ C2๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ ๊ฒ์ธ์ง, C1์ ๋จผ์ ๋ฐฉ๋ฌธํ ๊ฒ์ธ์ง๋ฅผ ์์ ํ์์ ํตํด ํ์ธํ์ฌ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ด๋ ๋ค์ต์คํธ๋ผ ํจ์๋ฅผ ๋ง๋ค์ด ์ผ์ ๊ตฌ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฐ์ ๊ตฌํ๋๋ฐ, ์ด ๊ฐ์ด -1์ ๋ฐํํ๋ค๋ฉด ๋ ์ ์ ์ด ์ด์ด์ง์ง ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๋ ๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋ C1๊ณผ C2๋ ์ง๋๋ฏ๋ก, ์ด๋ฅผ ๋จผ์ ํ์ธํ์ฌ ๋ฐฑํธ๋ํน์ฒ๋ผ ๊ฒฝ์ฐ๋ฅผ ์๋ผ์คฌ์ด๋ ๋๊ฒ ๋ค. ๋ถํ์ํ ๊ฒฝ๋ก ๊ณ์ฐ์ ํ ๋ฒ ๋ ํ ๊ฒ ๊ฐ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ