정구리의 우주정복
[BOJ] 백준 13424-비밀모임 파이썬 다익스트라 본문
반응형
다익스트라 문제 ! 사실 플로이드 와 ~ 샬로도 풀수있지만 나는 플로이드 와 ~~샬 하는법 몰라서 그냥 다익스트라로 풀었다
import sys
import heapq
INF = int(1e9)
input = sys.stdin.readline
def die(start):
q = []
heapq.heappush(q,(0,start))
distence[start] = 0
while q:
dist,now = heapq.heappop(q)
if dist > distence[now]:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distence[i[0]]:
distence[i[0]] = cost
heapq.heappush(q,(cost,i[0]))
tc = int(input())
for _ in range(tc):
n,m = map(int,input().split())
graph = [[] for _ in range(n+1)]
total_dis = [0] * (n+1)
for _ in range(m):
a,b,c = map(int,input().split())
graph[a].append((b,c))
graph[b].append((a,c))
num = int(input())
people = list(map(int,input().split())) #사람 어디있는지
for i in people:
distence = [INF] * (n+1)
die(i)
for j in range(1,n+1):
total_dis[j] += distence[j]
minn = 0
noww = INF
for i in range(1,n+1):
if noww > total_dis[i]:
noww = total_dis[i]
minn = i
print(minn)
기본 다익스트라 알고리즘 사용한뒤 사람의 위치마다 다익스트라를 써준다
total_dis 라는 변수를 만들어서 여기에 각 사람마다의 거리들의 누적치를 기록해준뒤
누가누가 제일 작나 해주면 끝 !!
반응형
'ALGORITHM > SOLVE' 카테고리의 다른 글
[BOJ] 백준 -다음순열,이전순열,모든순열 파이썬 (0) | 2021.02.18 |
---|---|
[BOJ] 백준 2437-저울 파이썬 (0) | 2021.02.05 |
[프로그래머스] 실패율 파이썬 (0) | 2021.01.07 |
[BOJ] 10825번 국영수 파이썬 (0) | 2021.01.07 |
[BOJ] 백준 1514번 잃어버린 괄호 파이썬 (0) | 2021.01.06 |
Comments