~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/1774
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
- dots : ๊ฐ ์ (์ ์ , ๋ ธ๋) ๋ณ x, y ์ขํ ์ ์ฅ
- edges : ๊ฐ์ ์ ๋น์ฉ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
- parent : ์ ์ ๋ณ ์ํ ์งํฉ ์ ๋ณด
- ๊ฐ ์ ์ ์ ๋ณด๋ฅผ ์์๋๋ก dots์ ์ ์ฅ
- ์ด๋ฏธ ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ union ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์งํฉ์ ์ํ๋๋ก ์ฐ๊ฒฐ
- ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ( ์ด๋ฏธ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ํฌํจํ์ง ์๋๋ค )์ ์ ๋ณด๋ฅผ edges์ ์ ์ฅ
- edges๋ฅผ ๊ฐ์ ๋น์ฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด ์ฐ๊ฒฐ
- ์ต์ข ๊ฒฐ๊ณผ๋ฅผ "{:.2f}".format(result) ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ๋ชจ๋ ์๊ฐ ์์์ 2์๋ฆฌ๊น์ง ๋ณด์ด๋๋ก ์ถ๋ ฅ
์์ฑ ์ฝ๋
import sys
import math
input = sys.stdin.readline
N, M = map(int, input().split())
dots = []
edges = []
parent = [i for i in range(N+1)]
def find(x):
if parent[x] != x:
parent[x] = find(parent[x])
return parent[x]
def union(a, b):
a, b = find(a), find(b)
minP, maxP = min(a, b), max(a, b)
parent[maxP] = minP
for _ in range(N): # ์ ์
x, y = map(int, input().split())
dots.append((x, y))
for _ in range(M): # ์ด๋ฏธ ์ฐ๊ฒฐ๋ ๊ฐ์
a, b = map(int, input().split())
union(a, b)
# ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ๊ตฌํ๊ธฐ
for i in range(N):
for j in range(i+1, N):
if find(i+1) != find(j+1): # (์ฃผ์)์ฐ๊ฒฐ๋์ด ์์ง ์์ ๋
edges.append((math.sqrt((dots[i][0]-dots[j][0])**2 + (dots[i][1]-dots[j][1])**2), i+1, j+1)) # (๋น์ฉ, ์ a , ์ b)
edges.sort() # ๊ฐ์ ๋น์ฉ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
result = 0
# print(edges)
for w, a, b in edges: # ์ต์ ๊ฐ์ ๋ถํฐ ๋ชจ๋ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ ๋ ๋๊น์ง ๋ฐ๋ณต
if find(a) != find(b):
union(a, b)
result += w
print("{:.2f}".format(result)) # (์ฃผ์) 4.0์ด๋ผ๋ 4.00์ผ๋ก ๋์ค๋๋ก ์ถ๋ ฅ
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
REFERENCE
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 9095 1, 2, 3 ๋ํ๊ธฐ | DP (0) | 2023.06.07 |
---|---|
[Python] ๋ฐฑ์ค 1715 ์นด๋ ์ ๋ ฌํ๊ธฐ | ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.06.06 |
[Python] ๋ฐฑ์ค 21924 ๋์ ๊ฑด์ค | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (2) | 2023.05.29 |
[Python] ๋ฐฑ์ค 19368 ํ์ฑ ์ฐ๊ฒฐ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.29 |
[Python] ๋ฐฑ์ค 14621 ๋๋ง ์๋๋ ์ฐ์ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.29 |