먼저 MST를 만든 다음에 최소 스패닝 트리를 만들기 위해 사용한 길을 이용해 다익스트라 알고리즘을 써서 각각 지점들 사이의 거리 최댓값을 구한다.
import sys
import heapq
input = sys.stdin.readline
n,k =map(int, input().split())
inf = int(1e9)
edges = []
parent = [i for i in range(n)]
def find(a):
if a != parent[a]:
parent[a] = find(parent[a])
return parent[a]
def union(a,b):
a =find(a)
b = find(b)
if a<b :
parent[b] = a
else :
parent[a] = b
for i in range(k):
a,b,c = map(int, input().split())
edges.append((c,a,b))
edges.sort()
# print(edges)
gra = [[]for _ in range(n)]
total = 0
mindist =0
for i in range(len(edges)):
cost,a,b= edges[i]
a1 =find(a)
b1 = find(b)
if a1 == b1 :
continue
else :
union(a,b)
gra[a].append((b, cost))
gra[b].append((a, cost))
total += cost
sub =0
def dijk(start):
dist = [inf for _ in range(n)]
dist[start] = 0
q =[]
q.append((0,start))
heapq.heapify(q)
while q :
wei, now =heapq.heappop(q)
if dist[now]< wei :
continue
else :
for nextnode, cost in gra[now] :
if dist[nextnode] > wei+cost :
dist[nextnode] = wei+cost
heapq.heappush(q,(dist[nextnode],nextnode))
return dist
for k in range(n):
arr =dijk(k)
sub = max(sub, max(arr))
print(total)
print(sub)
'알고리즘 문제풀이' 카테고리의 다른 글
음식물 피하기(1743 백준) (0) | 2023.08.30 |
---|---|
야쿠르트 아줌마 야쿠르트 주세요(백준 20160) (0) | 2023.08.30 |
골목 대장 호석 - 효율성 1 (백준20182) (0) | 2023.08.28 |
엔터프라이즈호 탈출(백준9505) (0) | 2023.08.26 |
Apple Delivery(백준 5944) (0) | 2023.08.25 |