-
[BOJ 1916] 최소비용구하기알고리즘 2021. 1. 2. 22:12
1916번: 최소비용 구하기
첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그
www.acmicpc.net
[풀이]
전형적인 다익스트라 문제.
단, A에서 B로 가는 길이 여러개일 수 있다는 함정이 존재!
그래서 간단히 처음에 가장 최소인 친구들로만 그래프를 구성해주면 된다.
from heapq import heappush,heappop import sys def solution(s,d,X): x=X[s-1] q=[] v=[0]*len(x) for idx,i in enumerate(x): heappush(q,(i,idx)) while True: cur_w,cur_s=heappop(q) if v[cur_s]==0: if cur_s==d-1: return cur_w for idx,i in enumerate(X[cur_s]): if x[idx]>cur_w+X[cur_s][idx]: x[idx]=cur_w+X[cur_s][idx] heappush(q,(x[idx],idx)) v[cur_s]=1 N=int(sys.stdin.readline()) M=int(sys.stdin.readline()) X=[[987654321 for i in range(N)]for j in range(N)] for i in range(M): i,j,w=map(int,sys.stdin.readline().split(' ')) if X[i-1][j-1]>w: X[i-1][j-1]=w s,d=map(int,sys.stdin.readline().split(' ')) print(solution(s,d,X))
평소에 다익스트라 풀때는 dictionary로 그래프를 구성하는 편이다.
index를 불러올때 O(nlogn)의 복잡도를 갖는다하여..
오늘은 무슨일인지 그냥 2차원 배열에 넣어보고 싶었다.ㅎㅎ
'알고리즘' 카테고리의 다른 글
[구현]min, maxheap (0) 2021.01.03 [구현]itertools 라이브러리 직접 구현 및 활용 정리 (0) 2021.01.03 [#4 kakao 2020 internship] 경주로 건설 (0) 2021.01.02 [BOJ 2014]소수의 곱 (0) 2021.01.01 [Python]Minheap (0) 2020.11.09