๐ ๋ฌธ์
๊ด์ ์ฐ ๊ธฐ์ญ์๋ ๋ณด๋ฆ๋ฌ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฌ๋น ์ฌ์ฐ๊ฐ ํ ๋ง๋ฆฌ ์ด๊ณ ์๋ค. ๋ฌ๋น ์ฌ์ฐ๊ฐ ๋ณด๋ฆ๋ฌ์ ๋ฌ๋น์ ๋ฐ์ผ๋ฉด ์๋ฆ๋ค์ด ๊ตฌ๋ฏธํธ๋ก ๋ณ์ ํ ์ ์๋ค. ํ์ง๋ง ๋ณด๋ฆ๋ฌ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฑด ๋ฌ๋น ์ฌ์ฐ๋ฟ๋ง์ด ์๋๋ค. ๋ฌ๋น์ ๋ฐ์์ ๋ฉ์ง ๋๋์ธ๊ฐ์ด ๋๊ณ ์ถ์ด ํ๋ ๋ฌ๋น ๋๋๋ ํ ๋ง๋ฆฌ ์ด๊ณ ์๋ค.
๊ด์ ์ฐ์๋ 1๋ฒ๋ถํฐ $ N $๋ฒ๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ $ N $๊ฐ์ ๋๋ฌด ๊ทธ๋ฃจํฐ๊ธฐ๊ฐ ์๊ณ , ๊ทธ๋ฃจํฐ๊ธฐ๋ค ์ฌ์ด์๋ $ M $๊ฐ์ ์ค์๊ธธ์ด ๋ ์๋ค. ์ค์๊ธธ์ ์ด๋ค ๋ฐฉํฅ์ผ๋ก๋ ์ง๋๊ฐ ์ ์์ผ๋ฉฐ, ์ด๋ค ๋ ๊ทธ๋ฃจํฐ๊ธฐ ์ฌ์ด์ ๋ ๊ฐ ์ด์์ ์ค์๊ธธ์ด ๋ ์๋ ๊ฒฝ์ฐ๋ ์๋ค. ๋ฌ๋น ์ฌ์ฐ์ ๋ฌ๋น ๋๋๋ 1๋ฒ ๋๋ฌด ๊ทธ๋ฃจํฐ๊ธฐ์์ ์ด๊ณ ์๋ค.
๋ณด๋ฆ๋ฌ์ด ๋จ๋ฉด ๋๋ฌด ๊ทธ๋ฃจํฐ๊ธฐ๋ค ์ค ํ๋๊ฐ ๋ฌ๋น์ ๋ฐ์ ๋ฐ๊ฒ ๋น๋๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌ๋น ์ฌ์ฐ์ ๋ฌ๋น ๋๋๋ ๋จผ์ ๋ฌ๋น์ ๋ ์ฐจ์งํ๊ธฐ ์ํด ์ต๋ํ ๋นจ๋ฆฌ ์ค์๊ธธ์ ๋ฐ๋ผ์ ๊ทธ ๊ทธ๋ฃจํฐ๊ธฐ๋ก ๋ฌ๋ ค๊ฐ์ผ ํ๋ค. ์ด๋ ๋ฌ๋น ์ฌ์ฐ๋ ๋ ์ผ์ ํ ์๋๋ก ๋ฌ๋ ค๊ฐ๋ ๋ฐ๋ฉด, ๋ฌ๋น ๋๋๋ ๋ฌ๋น ์ฌ์ฐ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ๋ฌ๋ฆด ์ ์์ง๋ง ์ฒด๋ ฅ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ๋ต์ ์ฌ์ฉํ๋ค. ๋ฌ๋น ๋๋๋ ์ถ๋ฐํ ๋ ์ค์๊ธธ ํ๋๋ฅผ ๋ฌ๋น ์ฌ์ฐ์ ๋ ๋ฐฐ์ ์๋๋ก ๋ฌ๋ ค๊ฐ๊ณ , ๊ทธ ๋ค๋ก๋ ์ค์๊ธธ ํ๋๋ฅผ ๋ฌ๋น ์ฌ์ฐ์ ์ ๋ฐ์ ์๋๋ก ๊ฑธ์ด๊ฐ๋ฉฐ ์ฒด๋ ฅ์ ํ๋ณตํ๊ณ ๋์ ๋ค์ ์ค์๊ธธ์ ๋ค์ ๋ฌ๋น ์ฌ์ฐ์ ๋ ๋ฐฐ์ ์๋๋ก ๋ฌ๋ ค๊ฐ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค. ๋ฌ๋น ์ฌ์ฐ์ ๋ฌ๋น ๋๋๋ ๊ฐ์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฌ๋น์ด ๋น์น๋ ๊ทธ๋ฃจํฐ๊ธฐ๊น์ง ๋ค๋ค๋ฅผ ์ ์๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ค. ๋ฐ๋ผ์ ๋์ ์ด๋ ๊ฒฝ๋ก๊ฐ ์๋ก ๋ค๋ฅผ ์๋ ์๋ค.
์ถ์ ์๋ ๊ด์ ์ฐ์ ๋ชจ๋ ๋๋ฌผ์ ์ฌ๋ํ์ง๋ง, ์ด๋ฒ์๋ ๋ฌ๋น ์ฌ์ฐ๋ฅผ ์กฐ๊ธ ๋ ์ฌ๋ํด ์ฃผ๊ธฐ๋ก ํ๋ค. ๊ทธ๋์ ๋ฌ๋น ์ฌ์ฐ๊ฐ ๋ฌ๋น ๋๋๋ณด๋ค ๋จผ์ ๋์ฐฉํ ์ ์๋ ๊ทธ๋ฃจํฐ๊ธฐ์ ๋ฌ๋น์ ๋น์ถฐ ์ฃผ๋ ค๊ณ ํ๋ค. ์ด๋ฐ ๊ทธ๋ฃจํฐ๊ธฐ๊ฐ ๋ช ๊ฐ๋ ์๋์ง ์์๋ณด์.
๐์ ๋ ฅ
์ฒซ ์ค์ ๋๋ฌด ๊ทธ๋ฃจํฐ๊ธฐ์ ๊ฐ์์ ์ค์๊ธธ์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ ์ ์ $ N, M $ $(2 ≤ N ≤ 4,000, 1 ≤ M ≤ 100,000) $์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ $ M $๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ ์ธ ๊ฐ์ ์ ์ $ a, b, d $ $(1 ≤ a, b ≤ N, a ≠ b, 1 ≤ d ≤ 100,000) $๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ $ a $๋ฒ ๊ทธ๋ฃจํฐ๊ธฐ์ $ b $๋ฒ ๊ทธ๋ฃจํฐ๊ธฐ ์ฌ์ด์ ๊ธธ์ด๊ฐ $ d $์ธ ์ค์๊ธธ์ด ๋ ์์์ ์๋ฏธํ๋ค.
๐์ถ๋ ฅ
์ฒซ ์ค์ ๋ฌ๋น ์ฌ์ฐ๊ฐ ๋ฌ๋น ๋๋๋ณด๋ค ๋จผ์ ๋์ฐฉํ ์ ์๋ ๋๋ฌด ๊ทธ๋ฃจํฐ๊ธฐ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
์ฐ์ ์ด ๋ฌธ์ ๋ฅผ ํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๋ฅผ ๋ณด์ง ์์๋ค(์ด์ ์ด๋ ๊ฒ ์ฐ์ตํด๋ณด๋ ค๊ณ ํ๋ค)
์ ์ฝ์ด๋ณด๋ ๊ทธ๋ํ ๋ฌธ์ ์ธ๊ฒ์ ํ์ ํ์๊ณ , ๋ฌธ์ ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด๋ณด์๋ค.
์ฌ์ฐ์ ๋๋์ ๊ทธ๋ํ ํ์ ์๋๋ ๋ค๋ฅด๊ณ ๋ฌธ์ ๋ ๋๋์ด๋ค. ์ฌ์ฐ๋ ๋จ์ํ ๋ฐ์ดํฌ์คํธ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ 1๋ฒ ๋ถํฐ ์์ํ์ฌ ๋๋จธ์ง ๋ ธ๋์ ๋ฐฉ๋ฌธ ์๊ฐ์ ํ์ ํ ์ ์์์ง๋ง, ๋๋๋ ์กฐ๊ธ ๋ฌ๋๋ค. ์ฒ์์๋ ๋๋ฐฐ์๋๋ก, ๋ค์์ 0.5๋ฐฐ์์ผ๋ก ๋ ๋ค์์ 2๋ฐฐ์๋๋ก ์ด๋ ๊ฒ ์๋๊ฐ ๋ณ์น์ ์ด์๋ค.
๋ฐฉ๋ฌธ ์๊ฐ์ ๋ด์ ๋ฐฐ์ด์ 1์ฐจ์์ผ๋ก ๋๋ฉด ์ด๊ฒ์ ์ฒดํฌํ ์ ์์๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์๋ค.
์ฆ n๋ฒ์งธ ๋ ธ๋์ ๋ฐฉ๋ฌธํ๊ธฐ ์ ์ 2๋ฐฐ์์ผ๋ก ์๋์ง, 0.5๋ฐฐ์์ผ๋ก ์๋์ง ๋ ๋ค ๋ด๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋๊น์ง ๋ฐฉ๋ฌธ ์๊ฐ์ ํ์ ํ๋ค๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ฌ์ฐ์ ๋๋์ ๋ฐฉ๋ฌธ ์๋๋ฅผ ๋น๊ตํ์ฌ ์ฌ์ฐ๊ฐ ๋นจ๋ฆฌ ์จ๊ฒ์ ์นด์ดํธํ์ฌ ์ถ๋ ฅํ๋ค.
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import sys, heapq input = sys.stdin.readline INF = int(1e9) # ์ฌ์ฐ ๋ฐ์ดํฌ์คํธ๋ผ def dijkstra(): distance = [INF]*(n+1) distance[1] = 0 hq = [] heapq.heappush(hq, (0,1)) while hq: dist, now = heapq.heappop(hq) if distance[now] < dist: continue for nex,cost in graph[now]: if dist+cost<distance[nex]: distance[nex] = dist+cost heapq.heappush(hq, (cost+dist, nex)) return distance[2:] # ๋๋ ๋ฐ์ดํฌ์คํธ๋ผ def dij_wolf(): # 2์ฐจ์ ๋ฐฐ์ด distance = [[INF]*(2) for _ in range(n+1)] distance[1] = [INF,0] #distance[1][1] = ์์, 0๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ 0.5๋ฐฐ์, 1๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ 2๋ฐฐ์ hq = [] heapq.heappush(hq, (0,1,1)) while hq: dist, now, run = heapq.heappop(hq) if distance[now][run]!=dist: continue for nex, cost in graph[now]: if run==1 and distance[nex][0]>dist+(cost//2): distance[nex][0] = dist+(cost//2) heapq.heappush(hq, ((cost//2)+dist, nex,0)) elif run==0 and distance[nex][1]>dist+(cost*2): distance[nex][1] = dist+(cost*2) heapq.heappush(hq, ((cost*2)+dist, nex, 1)) return distance[2:] def result(a,b): res = 0 for i in range(n-1): if a[i]<min(b[i]): res += 1 return res n,m = map(int,input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): a,b,d = map(int,input().split()) d*=2 # ๋ด์๋ X2 ๋ด์. ์? ๋๋ 0.5์์ ์ค์ ์ฐ์ฐ graph[a].append((b,d)) graph[b].append((a,d)) fox = dijkstra() wolf = dij_wolf() print(result(fox,wolf)) | cs |
๐ญ ์ํ์ฐฉ์ค
pypy๊ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ด์ ๋ ๋๋ ๋ชจ๋ฅด๊ฒ ๋ฟ
๐ ๋ฌธ์ ๋งํฌ ๋ฌ๋น ์ฌ์ฐ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2133๋ฒ ํ์ผ ์ฑ์ฐ๊ธฐ - ํ์ด์ฌ, ์๋ฐ (0) | 2022.12.20 |
---|---|
[๋ฐฑ์ค] 1261๋ฒ: ์๊ณ ์คํ (0) | 2022.11.23 |
[๋ฐฑ์ค] 13164๋ฒ: ํ๋ณต ์ ์น์ - ์๋ฐ (0) | 2022.10.09 |
[๋ฐฑ์ค] 14621๋ฒ: ๋๋ง ์๋๋ ์ฐ์ - ํ์ด์ฌ (1) | 2022.10.08 |
[๋ฐฑ์ค] 2887๋ฒ: ํ์ฑ ํฐ๋ - ํ์ด์ฌ (1) | 2022.10.05 |