-
[BOJ 20160, Python 3] 야구르트 아줌마 야구르트 주세요알고리즘/BOJ 2021. 10. 4. 13:24반응형
https://www.acmicpc.net/problem/20160
풀이
문제를 보면 모든 정점에서 다익스트라 알고리즘을 돌려야할 것 같지만, 야구르트 아줌마가 첫번째 지점을 제외한 야구르트를 파는 나머지 9개 지점의 정점을 다익스트라로 돌리고, 내가 시작점에서 움직이는 다익스트라를 돌려 총 10번 다익스트라를 돌리면 됩니다.
혹은 야구르트 아줌마 정점 9개를 돌리면서 내가 시작점에서 움직이는 다익스트라도 같이 돌려 총 18번 다익스트라를 돌려도 시간내에 통과합니다.
코드
아래 코드는 다익스트라를 총 18번 돌리는 코드입니다.
123456789101112131415161718192021222324252627282930313233343536def dijkstra(s, e):q = []; heappush(q, [0, s])S = [float('inf')] * (n+1)S[s] = 0while q:t, x = heappop(q)if t > S[x]: continuefor nx, nt in adj[x]:if S[nx] > t + nt:S[nx] = t + ntheappush(q, [t + nt, nx])return S[e]from heapq import *input = __import__('sys').stdin.readlinen, e = map(int, input().split())adj = [[] for _ in range(n+1)]for i in range(e):u, v, w = map(int, input().split())adj[u].append([v, w])adj[v].append([u, w])arr = [*map(int, input().split())]s = int(input())ans = float('inf')female = 0prev = arr[0]for i in range(10):fval = dijkstra(prev, arr[i])if fval == float('inf'): continuefemale += fvalprev = arr[i]mval = dijkstra(s, arr[i])if female >= mval: ans = min(ans, arr[i])print([-1, ans][ans != float('inf')])cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 20158, Python 3] 사장님 달려가고 있습니다 (0) 2021.10.04 [BOJ 20159, Python 3] 동작 그만. 밑장 빼기냐? (0) 2021.10.04 [BOJ 18128, C++] 치삼이의 징검다리 건너기 (0) 2021.10.01 [BOJ 20667, C++] 크롬 (0) 2021.09.27 [BOJ 23030, Python 3] 후다다닥을 이겨 츄르를 받자! (0) 2021.09.24