๐๏ธ Algorithm/๐ฉ ๋ฐฑ์ค
๐ฉ [๋ฐฑ์ค] [Python] [Gold3] 1238๋ฒ_ํํฐ
Dbswnstjd
2023. 5. 9. 12:31
๋ฌธ์
https://www.acmicpc.net/problem/1238
1238๋ฒ: ํํฐ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ M+1๋ฒ์งธ ์ค๊น์ง i๋ฒ์งธ ๋๋ก์ ์์์ , ๋์ , ๊ทธ๋ฆฌ๊ณ ์ด ๋๋ก๋ฅผ ์ง๋๋๋ฐ ํ์ํ ์์์๊ฐ Ti๊ฐ ๋ค์ด
www.acmicpc.net
ํ์ด
# ๋ฐฑ์ค 1238๋ฒ ๋ฌธ์ - ํํฐ
import heapq
n, m, x = map(int, input().split())
# n: ๋
ธ๋, m: ๊ฐ์ ์ ๊ฐ์
# ๋ชจ๋ ํ์ x์ ๊ฐ ์ ์๊ณ x์์ ์ง์ผ๋ก ๋์์ฌ ์ ์๋ ๋ฐ์ดํฐ๋ง ์
๋ ฅ
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b, cost = map(int, input().split())
graph[a].append((b,cost))
def dijkstra(start):
q = []
distance = [1e9] * (n+1)
heapq.heappush(q, (0, start))
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if distance[i[0]] > cost:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
return distance
result = 0
for i in range(1,n+1):
go = dijkstra(i)
back = dijkstra(x)
result = max(result, go[x] + back[i])
print(result)
์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ ๋ฌธ์ ์ด๋ค.
x๋ก ๊ฐ๋ ์ต๋จ๋น์ฉ๊ณผ ๋ค์ ์ง์ผ๋ก ๋์์ค๋ ์ต๋จ๋น์ฉ์ ๋ํ์ฌ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํ๋ฉด ๋๋ค.