프림 알고리즘을 이용해서 도시들을 모두 이어준 다음에 나중에 추가 비용을 더하면 된다.
크루스칼 알고리즘을 이용해도 된다.
14950번: 정복자
서강 나라는 N개의 도시와 M개의 도로로 이루어졌다. 모든 도시의 쌍에는 그 도시를 연결하는 도로로 구성된 경로가 있다. 각 도로는 양방향 도로이며, 각 도로는 사용하는데 필요한 비용이 존재
www.acmicpc.net
import sys
import heapq
input = sys.stdin.readline
n,m,t = map(int, input().split())
visit = [0 for i in range(n+1)]
gra = [[] for i in range(n+1)]
ans = 0
def prim(start):
global ans
q = [[0,start]]
flag = 0
heapq.heapify(q)
while q:
cost, now= heapq.heappop(q)
flag += 1
if visit[now]==0 :
visit[now] = 1
ans+= cost
for nextnode, nextcost in gra[now] :
if visit[nextnode] ==0 :
heapq.heappush(q, (nextcost ,nextnode))
plus = (n-1)*(n-2)//2
for i in range(m):
a,b,c= map(int, input().split())
gra[a].append((b,c))
gra[b].append((a,c))
prim(1)
ans += plus*t
print(ans)
'알고리즘 문제풀이' 카테고리의 다른 글
달나라 토끼를 위한 구매대금 지불 도우미(백준 17212) (0) | 2023.08.09 |
---|---|
악수 (백준 8394) (0) | 2023.08.09 |
세부 (백준 13905) (0) | 2023.08.06 |
Bad Cowtractors (백준 7044) (0) | 2023.08.06 |
우주신과의 교감(백준 1774) (0) | 2023.08.04 |