728x90
import sys
import heapq
input = sys.stdin.readline
INF= (int)(1e8)
N,M,X=map(int,input().split())
lst=[[] for _ in range(N+1)]
for i in range(M):
start,end,cost = map(int,input().split())
lst[start].append((end,cost))
# ์ง -> x๊น์ง ๋ค์ต์คํธ๋ผ x-> ์ง๊น์ง ๋ค์ต์คํธ๋ผ 2ํ ์ํ
def dijkstra(start,):
q = []
distance = [INF]*(N+1)
distance[start] = 0
heapq.heappush(q,(start,0))
while q:
node,dist=heapq.heappop(q)
if distance[node]<dist:
continue
else:
for next in lst[node]:
cost = next[1]+distance[node]
if(cost<distance[next[0]]):
distance[next[0]]=cost
heapq.heappush(q,(next[0],cost))
return distance
# x์์ ์์ํ๋๊ฑฐ (x์์ ์์ํ๋๊ฑฐ ๋ฏธ๋ฆฌ ์งฑ๋ฐ์๋๊ณ ์์)
ans = dijkstra(X)
ans[0]=0
print(ans)
# i์์ x๊น์ง
for i in range(1,N+1):
if i==X:
continue
else:
res = dijkstra(i)
# x๊ฐ ์ข
์ฐฉ์ง์ธ๊ฑฐ ๊ณ ๋ฅด๊ธฐ
ans[i] += res[X]
print(max(ans))
โ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ ๋ชป ์๊ฐํ๋๊ฑฐ
n๊ฐ์ ์ ์ ์์ X๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ + X๋ผ๋ ์ ์ ์์ n๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ์ด๋ฉด
X๋ผ๋ ์ ์ ์์ n๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ -> ๋ค์ต์คํธ๋ผ 1ํ ์ํ
n๊ฐ์ ์ ์ ์์ X๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ -> ๋ค์ต์คํธ๋ผ nํ ์ํ์ ํด์ฃผ๋ฉด ๋๋ค
๊ทธ๋๊น ์ ์ด์ X์์ ์์์ 1๋ฒ๋ง ํ๋ฉด ๋๋๊น ์งฑ๋ฐ์๋๊ณ ์์ํ๋ฉด ๋๋ค. (์ด๊ฑธ ๋ชปํด์ n๋ฒ ๋๋ฆฌ๊ณ ์์๋ค n์ด 1000๊น์ง ๊ฐ๋๋ฐ)
728x90