[백준] 1238번 파티
[문제]
https://www.acmicpc.net/problem/1238
[코드]
import sys
import heapq
INF = int(1e9)
input = sys.stdin.readline
n, m, x = map(int, input().split())
graph = [[] for i in range(n+1)]
for i in range(m):
a, b, c = map(int, input().split())
graph[a].append([b,c])
distance = [INF] * (n + 1)
def dijkstra(start):
heap = []
heapq.heappush(heap, [0, start])
distance[start] = 0
while heap:
dist, now = heapq.heappop(heap)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(heap, [cost, i[0]])
dijkstra(x)
res_go = distance
for i in range(1, n + 1):
distance = [INF] * (n + 1)
dijkstra(i)
res_go[i] += distance[x]
print(max(res_go[1:]))
[풀이]
import sys
import heapq
INF = int(1e9)
input = sys.stdin.readline
n, m, x = map(int, input().split())
graph = [[] for i in range(n+1)]
for i in range(m):
a, b, c = map(int, input().split())
graph[a].append([b,c])
distance = [INF] * (n + 1)
def dijkstra(start):
heap = []
heapq.heappush(heap, [0, start])
distance[start] = 0
while heap:
dist, now = heapq.heappop(heap)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(heap, [cost, i[0]])
dijkstra(x)
res_go = distance
for i in range(1, n + 1):
distance = [INF] * (n + 1)
dijkstra(i)
res_go[i] += distance[x]
print(max(res_go[1:]))
다익스트라를 활용하여 x에서 각자의 집까지 거리 'x->집'을 구한다
반대로 1번 학생부터 집에서 x까지 '집->x'를 'x->집'과 더한다. 이러면 왕복 거리를 구할 수 있다
범위 1부터 끝까지 max값을 출력한다
Author And Source
이 문제에 관하여([백준] 1238번 파티), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjy5349/백준-1238번-파티저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)