Algorithm/백준

[백준 알고리즘] 12834번: 주간 미팅 (Python)

에릭 Kim 2023. 11. 27. 15:40
반응형

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

 

12834번: 주간 미팅

첫째 줄에 KIST 기사단 팀원의 수 N, 장소의 수 V, 도로의 수 E가 주어진다. (N ≤ 100, V ≤ 1000, E ≤ 10000) 둘째 줄에 KIST의 위치 A와 씨알푸드의 위치 B가 주어진다. (1 ≤ A, B ≤ V) 셋째 줄에 팀원 N명의

www.acmicpc.net

 

소스코드

import sys
import heapq as hq
input = sys.stdin.readline


def dijkstra(start):
  min_dis = [float("inf") for _ in range(v+1)]
  q =[]
  hq.heappush(q,[0,start])
  min_dis[start] = 0
  
  while q:
    cur_dis,cur_node = hq.heappop(q)

    if min_dis[cur_node] < cur_dis:
      continue

    for nnode,ndis in graph[cur_node]:
      if min_dis[nnode] > ndis + cur_dis:
        min_dis[nnode] = ndis+cur_dis
        hq.heappush(q,[ndis+cur_dis,nnode])

  return min_dis

n,v,e =map(int,input().split())
A,B = map(int,input().split())
member = list(map(int,input().split()))
result = 0
graph = [[]for _ in range(v+1)]
for _ in range(e):
  a,b,c = map(int,input().split())
  graph[a].append([b,c])
  graph[b].append([a,c])

for i in member:
  ans = 0
  k = dijkstra(i)
  first = k[A]
  second = k[B]
  if first == float("inf") and second == float("inf"):
    ans = -2
  elif first == float("inf"):
    ans = -1 +second
  elif second == float("inf"):
    ans = first + -1
  else:
    ans = first + second

  result += ans
print(result)

 

 

풀이

★ 다익스트라 알고리즘을 활용해 팀원의 집 위치에서 kist와 씨알푸드까지의 최단거리를 각각 구해준 뒤, 모든 팀원의 거리 합을 출력하면 됩니다 ! 

반응형