백준 온라인 저지, 최단경로 / 14284번: 간선이어가기2 (파이썬 / 백준 골드문제)
2021. 11. 9. 00:39ㆍ알고리즘/최단경로
728x90
반응형
문제
정점 n개, 0개의 간선으로 이루어진 무방향 그래프가 주어진다. 그리고 m개의 가중치 간선의 정보가 있는 간선리스트가 주어진다. 간선리스트에 있는 간선 하나씩 그래프에 추가해 나갈 것이다. 이때, 특정 정점 s와 t가 연결이 되는 시점에서 간선 추가를 멈출 것이다. 연결이란 두 정점이 간선을 통해 방문 가능한 것을 말한다.
s와 t가 연결이 되는 시점의 간선의 가중치의 합이 최소가 되게 추가하는 간선의 순서를 조정할 때, 그 최솟값을 구하시오.
입력
첫째 줄에 정점의 개수 n, 간선리스트의 간선 수 m이 주어진다.(2≤n≤5000,1≤m≤100,000)
다음 m줄에는 a,b,c가 주어지는데, 이는 a와 b는 c의 가중치를 가짐을 말한다. (1≤a,b≤n,1≤c≤100,a≠b)
다음 줄에는 두 정점 s,t가 주어진다. (1≤s,t≤n,s≠t)
모든 간선을 연결하면 그래프는 연결 그래프가 됨이 보장된다.
출력
s와 t가 연결되는 시점의 간선의 가중치 합의 최솟값을 출력하시오,
예제 입력 1
8 9 1 2 3 1 3 2 1 4 4 2 5 2 3 6 1 4 7 3 5 8 6 6 8 2 7 8 7 1 8
예제 출력 1
5
접근 방법
- 다익스트라 최단경로 알고리즘과 분리집합을 사용해 알고리즘을 구현한다.
코드
# https://www.acmicpc.net/problem/14284
# 접근방법
# 다익스트라 최단경로 알고리즘과 분리집합을 사용해 알고리즘을 구현한다.
def get_parent(idx):
if parent[idx] == idx:
return idx
parent[idx] = get_parent(parent[idx])
return parent[idx]
def find_union(x1, x2):
x1 = get_parent(x1)
x2 = get_parent(x2)
if x1 > x2:
parent[x1] = x2
else:
parent[x2] = x1
def dijkstra(start):
distance[start] = 0
q = []
heapq.heappush(q, [0, start])
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for x in graph[now]:
cost = dist + x[1]
if distance[x[0]] > cost:
heapq.heappush(q, [cost, x[0]])
distance[x[0]] = cost
import sys, heapq
sys.setrecursionlimit(10 ** 6)
input = sys.stdin.readline
n, m = map(int, input().split())
array = [list(map(int, input().split())) for _ in range(m)]
s, t = map(int, input().split())
graph = [[] for _ in range(n+1)]
parent = [i for i in range(n+1)]
for a, b, c in array:
find_union(a, b)
graph[a].append([b, c])
graph[b].append([a, c])
if s == t:
break
INF = int(1e9)
distance = [INF for _ in range(n+1)]
dijkstra(s)
print(distance[t])
728x90
반응형
'알고리즘 > 최단경로' 카테고리의 다른 글
백준 온라인 저지, 최단경로 / 1939번: 중량제한 (파이썬 / 백준 골드문제) (0) | 2021.11.14 |
---|---|
백준 온라인 저지, 최단경로 / 18223번: 민준이와마산그리고건우 (파이썬 / 백준 골드문제) (0) | 2021.11.12 |
백준 온라인 저지, 최단경로 / 1719번: 택배 (파이썬 / 백준 골드문제) (0) | 2021.09.15 |
백준 온라인 저지, 최단경로 / 2665번: 미로만들기 (파이썬 / 백준 골드문제) (0) | 2021.09.15 |
백준 온라인 저지, 최단경로 / 19584번: 난개발 (파이썬 / 백준 골드문제) (0) | 2021.09.15 |