From fe614f59342e00a80adc0a26fe4581f447964cf3 Mon Sep 17 00:00:00 2001 From: tgyuuAn Date: Thu, 9 Jan 2025 02:51:29 +0900 Subject: [PATCH] 2025-01-09 --- tgyuuAn/README.md | 1 + ...0\353\204\267 \354\204\244\354\271\230.py" | 82 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 "tgyuuAn/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\354\235\270\355\204\260\353\204\267 \354\204\244\354\271\230.py" diff --git a/tgyuuAn/README.md b/tgyuuAn/README.md index db250b75..af7de49c 100644 --- a/tgyuuAn/README.md +++ b/tgyuuAn/README.md @@ -88,4 +88,5 @@ | 82차시 | 2024.11.22 | 희소 배열 | 합성함수와 쿼리 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/257 | 83차시 | 2024.12.01 | 수학 + 구현 | 칵테일 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/259 | 84차시 | 2024.12.31 | BFS | 불! | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/261 +| 85차시 | 2025.01.09 | 다익스트라 + 이분 탐색 | 인터넷 설치 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/264 --- diff --git "a/tgyuuAn/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\354\235\270\355\204\260\353\204\267 \354\204\244\354\271\230.py" "b/tgyuuAn/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\354\235\270\355\204\260\353\204\267 \354\204\244\354\271\230.py" new file mode 100644 index 00000000..6316099d --- /dev/null +++ "b/tgyuuAn/\353\213\244\354\235\265\354\212\244\355\212\270\353\235\274/\354\235\270\355\204\260\353\204\267 \354\204\244\354\271\230.py" @@ -0,0 +1,82 @@ +from heapq import * +from collections import defaultdict + +total_node_count, total_edge_count = map(int,input().split(" ")) + +visited = [False for _ in range(total_node_count+1)] +distance_table = [int(1e9) for _ in range(total_node_count+1)] +link_table = defaultdict(lambda: defaultdict(lambda : int(1e9))) + +for _ in range(total_edge_count): + node1, node2, weight = map(int, input().split(" ")) + link_table[node1][node2] = weight + link_table[node2][node1] = weight + +specific_node1, specific_node2 = map(int, input().split(" ")) +distance_table[1] = 0 +heap = [[0,1]] + +while heap: + + now_distance, now_node = heappop(heap) + visited[now_node] = True + + for link_node in link_table[now_node]: + + if visited[link_node] == True: + continue + + if distance_table[link_node] > now_distance + link_table[now_node][link_node]: + + distance_table[link_node] = now_distance + link_table[now_node][link_node] + heappush(heap,[distance_table[link_node],link_node]) + +specific_node1_distance_table = [int(1e9) for _ in range(total_node_count+1)] +specific_node1_distance_table[specific_node1] = 0 +visited = [False for _ in range(total_node_count+1)] +heap = [[0,specific_node1]] +while heap: + + now_distance, now_node = heappop(heap) + visited[now_node] = True + + for link_node in link_table[now_node]: + + if visited[link_node] == True: + continue + + if specific_node1_distance_table[link_node] > now_distance + link_table[now_node][link_node]: + + specific_node1_distance_table[link_node] = now_distance + link_table[now_node][link_node] + heappush(heap,[specific_node1_distance_table[link_node],link_node]) + +specific_node2_distance_table = [int(1e9) for _ in range(total_node_count+1)] +specific_node2_distance_table[specific_node2] = 0 +visited = [False for _ in range(total_node_count+1)] +heap = [[0,specific_node2]] +while heap: + + now_distance, now_node = heappop(heap) + visited[now_node] = True + + for link_node in link_table[now_node]: + + if visited[link_node] == True: + continue + + if specific_node2_distance_table[link_node] > now_distance + link_table[now_node][link_node]: + + specific_node2_distance_table[link_node] = now_distance + link_table[now_node][link_node] + heappush(heap,[specific_node2_distance_table[link_node],link_node]) + +first_route = distance_table[specific_node1] + specific_node1_distance_table[specific_node2] + specific_node2_distance_table[total_node_count] +second_route = distance_table[specific_node2] + specific_node2_distance_table[specific_node1] + specific_node1_distance_table[total_node_count] + +if first_route >= int(1e9) and second_route >= int(1e9): + print(-1) + +elif first_route < second_route: + print(first_route) + +else: + print(second_route) \ No newline at end of file