본문 바로가기

알고리즘 문제풀이

우주신과의 교감(백준 1774)

MST를 사용하는 대표적인 문제이다. 이미 연결된 길은 건설할 필요가 없으니 0의 값으로 저장한다. 

이후 프림 알고리즘을 사용한다. 

import sys 
import heapq 
input = sys.stdin.readline 

def calc(x1,y1,x2,y2):
    return (((x1-x2)**2 + (y1-y2)**2)**0.5 )



def prim(start) :
    global ans 
    q =[[0,start]]
    heapq.heapify(q)
    while q :
        cost,now = heapq.heappop(q)
        if (visited[now] ==0):
            visited[now] = 1 
            ans += cost 
            for nextnode,nextcost in gra[now] :
                if(visited[nextnode]==0):
                    heapq.heappush(q,(nextcost,nextnode))
n,m = map(int, input().split())
gra =[[]for _ in range(n+1)]
points = [[0,0,0]]
for i in range(n):
    a,b= map(int, input().split())
    points.append((i,a,b))

for _ in range(m):
    a,b = map(int, input().split())
    gra[a].append((b,0))
    gra[b].append((a,0))

for i in range(1, n):
    for j in range(i+1, n+1):
        x1,y1 = points[i][1],points[i][2]
        x2,y2 = points[j][1],points[j][2]
        howfar =calc(x1,y1,x2,y2)
        gra[i].append((j,howfar))
        gra[j].append((i,howfar))
visited = [0 for i in range(n+1)]
ans = 0 
prim(1)

print("%.2f" %(ans))

'알고리즘 문제풀이' 카테고리의 다른 글

세부 (백준 13905)  (0) 2023.08.06
Bad Cowtractors (백준 7044)  (0) 2023.08.06
Beads (백준 11143)  (0) 2023.08.02
도시 건설(백준 21924)  (0) 2023.07.31
나만 안되는 연애(백준 14621)  (0) 2023.07.31