[최단 경로] 문제로 이해하는 dijkstra algorithm

2023. 8. 10. 21:01·Computer Science/Algorithms

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

 

1238번: 파티

첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어

www.acmicpc.net

 

 

import collections
import sys
from heapq import heappop, heappush
si = sys.stdin.readline
INF = float('inf') 

n,m,x = map(int,si().split())
graph = [[] for _ in range(n+1)]

for _ in range(m) :
    u,v,w = map(int, si().split())
    # u에서 v로 갈때 드는 비용 w
    graph[u].append((v,w))

def dijkstra(start) :
    q = []
    heappush(q, (0, start))
    distance[start] = 0 # 시작점 초기화
    while q :
        # 가장 최단 거리인 노드까지의 비용, 현재 노드
        dist, now = heappop(q)
        if distance[now] != dist : continue
        for node in graph[now] :
            # cost = 현재 위치의 비용 + 이동할 노드의 비용
            cost = dist + node[1]
             # 현재 위치의 비용 + 이동할 노드의 비용 < 이동할 노드의 위치가 기존에 갖고 있던 비용
            if cost < distance[node[0]] :
                distance[node[0]] = cost
                heappush(q, (cost, node[0]))

# 1000ms
distance = [INF] * (n + 1)
res = collections.defaultdict(int)
dijkstra(x)
for i in range(1,n+1) :
    if i == x : continue
    res[i] += distance[i]

for i in range(1,n+1) :
    if i == x : continue
    distance = [INF] * (n + 1)
    dijkstra(i)
    res[i] += distance[x]

print(max(res.values()))

''' 1900ms
res = 0
for i in range(1,n+1) :
    go = dijkstra(i)
    back = dijkstra(x)
    res = max(res, go[x] + back[i])
'''

 

'Computer Science/Algorithms' 카테고리의 다른 글
  • [링크드 리스트] 링크드 리스트 뒤집기
  • [MST] BOJ 1197번: 최소 스패닝 트리
  • [위상 정렬] 문제로 이해하는 topology sort
  • Floyd's tortoise and hare algorithm
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    알고리즘
    오블완
    인덱서블 타입
    python
    티스토리챌린지
    Bucket
    CORS
    세그먼트 트리
    오프라인 쿼리
    백준
    누적합
    인터페이스
    interface
    도커
    구간합
    삼성기출
    segment tree
    imos법
    docker image
    PrefixSum
    AWS
    인덱스 시그니처
    온라인 쿼리
    TypeScript
    컨테이너
    S3
    docker
    점 업데이트
    타입스크립트
    구간 업데이트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
[최단 경로] 문제로 이해하는 dijkstra algorithm
상단으로

티스토리툴바