Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BFS
- 사이클게임
- 이모티콘할인행사
- 최소스패닝트리
- DP
- 두큐합같게만들기
- 17404
- 위상정렬
- 거리두기확인하기
- [1차]캐시
- 징검다리건너기
- RGB거리2
- 프로그래머스
- 도넛과막대그래프
- 파괴되지않은건물
- javascript
- 벽부수고이동하기
- 구현
- 알고리즘
- 트리의지름
- 파이썬
- 그래프탐색
- 자물쇠와열쇠
- 백준
- 다익스트라
- 섬연결하기
- 최단경로
- 프림알고리즘
- DFS
- 큐
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘] 백준 1753 - 최단경로 본문
문제
https://www.acmicpc.net/problem/1753
1753번: 최단경로
첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가
www.acmicpc.net
풀이
그냥 정말 다익스트라 기초 문제.
2달 전에 풀었던 문제인데 메모리 초과, 시간초과, 맞았습니다... 라고 돼있어서 좀 걱정했는데 아니나다를까 이번 처음 풀이도 시간 초과가 떴다. ㅠㅠ 뭐가 문제인지 고민했는데 혹시나..하고 input을 sys로 고쳐줬더니 바로 정답. 아오 이럴 때마다 아주 킹이 받는다.
풀이 적을 것도 없이 일반 다익스트라 문제고, heapq에서 쓸 때 가중치(거리)를 앞에 둬서 최소힙이 유지되게끔 해야한다는 점만 주의하면 될 듯하다.
정답 코드
import heapq
import sys
input = sys.stdin.readline
v,e = map(int,input().split())
k = int(input())
graph = [[] for _ in range(v+1)]
# graph = [[1e9 for _ in range(ori_v+1)] for _ in range(ori_v+1)]
visited=[1e9] * (v+1)
for _ in range(e):
a,b,c= map(int,input().split())
graph[a].append((c, b))
def dijkstra(x):
q = []
heapq.heappush(q,(0,x))
visited[x] = 0
while q:
d,x = heapq.heappop(q)
if visited[x] < d:
continue
for nw,nx in graph[x]:
nd = d + nw
if visited[nx] > nd:
heapq.heappush(q,(nd,nx))
visited[nx] = nd
dijkstra(k)
# print(graph[k])
for i in range(1,v+1):
if visited[i] == 1e9:
print('INF')
else:
print(visited[i])
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 피로도 (0) | 2024.01.06 |
---|---|
[알고리즘] 백준 1865 - 웜홀 / 벨만 포드 알고리즘 (1) | 2024.01.06 |
[컴퓨터구조] CPU 작동 원리 (1) | 2024.01.03 |
[알고리즘] 프로그래머스 - 프로세스 (0) | 2024.01.03 |
[알고리즘] 프로그래머스 - 두 큐 합 같게 만들기 (2) | 2024.01.03 |