์ฌ์ฐ์ ๋๋๊ฐ ๊ฐ๊ฐ์ ๊ทธ๋ฃจํฐ๊ธฐ์ ์ต๋จ ์๊ฐ์ผ๋ก ๋์ฐฉํ๊ณ ๋์ฐฉํ ์๊ฐ๋ค ์ค์์ ์ฌ์ฐ๊ฐ ๋๋๋ณด๋ค ๋นจ๋ฆฌ ๋์ฐฉํ ์ ์๋ ๊ทธ๋ฃจํฐ๊ธฐ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๊ทธ๋ฃจํฐ๊ธฐ๋ฅผ ํ๋์ ์ ์ ์ผ๋ก ์๊ฐํ๊ณ ์ฌ์ฐ์ ๋๋๊ฐ ์ถ๋ฐํ๋ ์ง์ ์ด 1์ด๋ผ๋ฉด 1์์๋ถํฐ ๋ค๋ฅธ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํ์ดํ๋ค.
์ฌ์ฐ์ ์ด๋ ์๋๋ ํญ์ ์ผ์ ํ๋ค๊ณ ํ์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ธ ๋ค์ต์คํธ๋ผ ํ์ด๋ก ํด๊ฒฐํ ์ ์์๋ค. ํ์ง๋ง ๋๋์ ๊ฒฝ์ฐ๋ ํ ๋ฒ์ 2๋ฐฐ์ ์๋๋ก, ๊ทธ ๋ค์์ 1/2์๋๋ก ์ด๋ํ๋ ์ฐจ์ด๊ฐ ์์๋ค. ์ด ๋ง์ A์์ B๋ผ๋ ์ ์ ์ผ๋ก 1ํ์ฐจ์ ๋ฐฉ๋ฌธํ ๋๋ 2๋ฐฐ์์ผ๋ก ๋ฐฉ๋ฌธํ๊ฒ ๋์ง๋ง, 2ํ์ฐจ์ ๋ฐฉ๋ฌธํ ๋๋ 1/2์๋๋ก ๋ ๋๋ฆฌ๊ฒ ๋ฐฉ๋ฌธํ๊ฒ ๋ ๊ฒ์ด๋ผ๋ ๋ง์ด ๋๋ค.
ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ๋จ์ํ ๋ ๋ฆ๊ฒ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ์์ ๊ทธ๋ํ์์ ์ ๋๋ก ๋ ๊ฐ์ ๊ตฌํ ์ ์๊ฒ ๋๋ค. ์ ์ 2์ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 1->2์ 1->3->2 ๋ ๊ฐ์ง๊ฐ ์์ ์ ์๋ค. ๋ค์ต์คํธ๋ผ๋ ํญ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ถํฐ ๊ตฌํด๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ถ๋ฐ์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ(1->2)์ ๊ทธ ๋ค์ ์ต๋จ๊ฑฐ๋ฆฌ์ ์ ์ ์์ ์ฐ๊ฒฐ๋ ์ ์ ์์ ๊ตฌํด์ง๋ ๊ฒฝ์ฐ(1->3->2)๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. 1->2์ ๊ฒฝ์ฐ 1ํ์ฐจ์ด๊ธฐ ๋๋ฌธ์ 2๋ฐฐ์ ์๋๋ก ์ด๋ํด์ 1.5์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๊ฒ ๋๋ค. 1->3->2๋ 2ํ์ฐจ์ด๊ธฐ ๋๋ฌธ์ 1->3์ 1์ด์ง๋ง 3->2๋ 1/2์๋๊ฐ ๋์ด 4์ด๋ฏ๋ก ํฉ์ณ์ 5๊ฐ ๋๋ค. ์ด๋ฏธ 1ํ์ฐจ์ ์ด๋์ผ๋ก 1.5๋ง์ ์ด๋ํ ์ ์๋๋ฐ, ์ ์ 2๊น์ง ๊ฐ๋๋ฐ 5๊ฐ ๊ฑธ๋ฆฌ๋ ์๋๋ฅผ ๊ตณ์ด ์ ์ฅํ ํ์๊ฐ ์์๊น ์ถ์๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ ์ ์ 4๊น์ง ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ ์๊ฒผ๋ค. 1 3 2๋ก 2ํ ์ด๋ํ ๊ฒฝ์ฐ๋ 2->4๋ก ์ด๋ํ ๋ 3ํ์ฐจ๊ฐ ๋์ด 4์ ์ ๋ฐ์ธ 2๋งํผ ์ด๋ํ๊ฒ ๋๋ค. ํ์ง๋ง 1 2๋ก ์ด๋ํ ๊ฒฝ์ฐ๋ 2->4์ ์ด๋์ด 3ํ์ฐจ๊ฐ ๋์ด 4์ 2๋ฐฐ์ธ 8๋งํผ ์ด๋ํ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ๊ฐ๊ฐ์ ์ ์ ์ ํ์/์ง์ ํ์ฐจ์ ๋ฐฉ๋ฌธํ์ ๋ ๊ฑธ๋ฆฌ๋ ๊ฐ๊ฐ์ ์ต๋จ์๊ฐ์ ๋ชจ๋ ์ ์ฅํด์ผ ํ๋ค. 2๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ 2์ฐจ์์ผ๋ก ๊ตฌํํ๋ค.
5 5
1 2 1
2 3 1
1 3 1
1 4 1
4 5 10000
์์ ๋ ผ๋ฆฌ๋๋ก ํ์ดํ์ง๋ง 57%์ฏค์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ง๋ฌธ ๊ฒ์ํ์์ ์์ ๋ฐ๋ก๋ฅผ ์ฐพ์๋ค. ๋ฌธ์ ๋ ์ถ๋ฐ์ ์ผ๋ก ๋ค์ ๋๋์์ฌ ์๋ ์๋ค๋ ์ฌํญ์ ๊ณ ๋ คํ์ง ์์๋ ์ ์ด์๋ค. ์ถ๋ฐ์ ์์ ์ด๋ํ๋ ๊ฒฝ์ฐ๋ 0ํ์ฐจ์ ํด๋นํ๋ค. ๋ค๋ฅธ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ค๊ฐ ๋ค์ ๋์์ค๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ค์ผ ํ๋๋ฐ ์ด๊ฑธ ์ด๊ธฐํํ ๋ ๋ฏธ๋ฆฌ 0์ผ๋ก ๋คํด์ ์ฌ๋ฐฉ๋ฌธ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ์์ ๋ฐ๋ก์์ 1->3->1->4์ ๊ฐ์ด ๋ฐฉ๋ฌธํ ์๊ฐ ์๊ฒ ๋๊ณ , 4->5๊ฐ ์ง์ ํ์ฐจ์ ๋น์ฒจ๋์ด 2๋ง ์๊ฐ์ด ๋๊ฒ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
import sys
from collections import defaultdict
from heapq import heappop, heappush
input = sys.stdin.readline
# ๋๋์ ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
def move_wolf(n, graph):
dist = [[1e9, 1e9] for _ in range(n+1)]
dist[1][0] = 0
pq = [(0, 1, 0)]
while pq:
w, i, v = heappop(pq)
if dist[i][v] != w:
continue
if v == 0:
for j, _w in graph[i]:
cost = w+_w/2
if dist[j][1] > cost:
heappush(pq, (cost, j, 1))
dist[j][1] = cost
else:
for j, _w in graph[i]:
cost = w + _w*2
if dist[j][0] > cost:
heappush(pq, (cost, j, 0))
dist[j][0] = cost
return list(map(min, dist[1:]))
# ์ฌ์ฐ์ ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
def move_fox(n, graph):
dist = [1e9]*(n+1)
dist[1] = 0
pq = [(0, 1)]
while pq:
w, i = heappop(pq)
if dist[i] != w:
continue
for j, _w in graph[i]:
cost = w+_w
if dist[j] > cost:
dist[j] = cost
heappush(pq, (cost, j))
return dist[1:]
n, m = map(int, input().strip().split())
graph = defaultdict(list)
for _ in range(m):
a, b, d = map(int, input().strip().split())
graph[a].append([b, d])
graph[b].append([a, d])
answer = 0
wolf, fox = move_wolf(n, graph), move_fox(n, graph)
for i in range(n):
if fox[i] < wolf[i]:
answer += 1
print(answer)