~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/4386
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ํฌ๋ฃจ์ค์นผ (์ต์ ์คํจ๋ ํธ๋ฆฌ) ์๊ณ ๋ฆฌ์ฆ
- alist : ๊ฐ ์ ์ ์ x, y ์ ๋ณด ์ ์ฅ
- edges : ์ ์ ๊ฐ ๋ชจ๋ ๊ฐ์ ๊ธธ์ด( sqrt((x1 - x2)**2 + (y1 - y2)**2) ) ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅ
- parent : ์งํฉ์ ๋ณด ( ์ฐ๊ฒฐ๋ ์ ์ ์ ๋ณด)
- find ํจ์ : ๊ฐ์ ์งํฉ์ ์ํด์๋์ง ํ์ธ
- union ํจ์ : ๊ฐ์ ์งํฉ์ ์ํ๋๋ก parent ๋ฆฌ์คํธ ์ ๋ฐ์ดํธ
- ์ ๋ ฌ๋ edges๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ฉฐ ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด ์ฐ๊ฒฐ
์์ฑ ์ฝ๋
import math
import sys
input = sys.stdin.readline
n = int(input())
alist = []
edges = []
parent = [i for i in range(n+1)]
for _ in range(n):
x, y = map(float, input().split())
alist.append((x, y))
for i in range(n):
for j in range(i+1, n):
x1, y1 = alist[i]
x2, y2 = alist[j]
edges.append((math.sqrt((x1 - x2)**2 + (y1 - y2)**2), i, j))
edges.sort()
def find(x):
if x != parent[x]:
parent[x] = find(parent[x])
return parent[x]
def union(a, b):
a = find(a)
b = find(b)
if a < b:
parent[b] = a
else:
parent[a] = b
result = 0
for w, a, b in edges:
if find(a) != find(b):
union(a, b)
result += w
print(round(result, 2))
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 14621 ๋๋ง ์๋๋ ์ฐ์ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.29 |
---|---|
[Python] ๋ฐฑ์ค 6497 ์ ๋ ฅ๋ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
[Python] ๋ฐฑ์ค 1922 ๋คํธ์ํฌ ์ฐ๊ฒฐ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
[Python] ๋ฐฑ์ค 1647 ๋์ ๋ถํ ๊ณํ | ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.28 |
[Python] ๋ฐฑ์ค 1197 ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2023.05.23 |