백준 22865 가장 먼 곳

문제

https://www.acmicpc.net/problem/22865

코드

import heapq
import sys
input = sys.stdin.readline
n = int(input())
a, b, c = map(int, input().split())
m = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    d, e, l = map(int, input().split())
    graph[d].append((e, l))
    graph[e].append((d, l))


def dijkstra(start):
    dp = [1e9]*(n+1)
    dp[start] = 0
    pq = []
    heapq.heappush(pq, (0, start))

    while pq:
        dist, now = heapq.heappop(pq)

        if dist > dp[now]:
            continue

        for next, cost in graph[now]:
            cost += dist
            if dp[next] > cost:
                dp[next] = cost
                heapq.heappush(pq, (cost, next))
    return dp


dp1 = dijkstra(a)
dp2 = dijkstra(b)
dp3 = dijkstra(c)

v = 0
answer = 0
for i in range(1, n+1):
    now = min(dp1[i], min(dp2[i], dp3[i]))
    if v < now:
        v = now
        answer = i
print(answer)

풀이

친구 a,b,c에서 각각 다익스트라로 모든 집까지의 거리를 구한 뒤 문제의 요구사항에 맞게 정답을 출력했습니다

좋은 웹페이지 즐겨찾기