์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[boj/python] 1238๋ฒˆ ํŒŒํ‹ฐ

Alchemists 2023. 11. 16. 18:25
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