π λ¬Έμ
λλ 2040λ , μ΄λ―Όνμ μ°μ£Όμ μμ λ§μ μκ΅μ λ§λ€μλ€. μκ΅μ $ N $κ°μ νμ±μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€. λ―Όνμ΄λ μ΄ νμ±μ ν¨μ¨μ μΌλ‘ μ§λ°°νκΈ° μν΄μ νμ±μ μ°κ²°νλ ν°λμ λ§λ€λ €κ³ νλ€.
νμ±μ 3μ°¨μ μ’νμμ ν μ μΌλ‘ μκ°νλ©΄ λλ€. λ νμ± $ A(x_{A}, y_{A}, z_{A}) $μ $ B(x_{B}, y_{B}, z_{B}) $λ₯Ό ν°λλ‘ μ°κ²°ν λ λλ λΉμ©μ $ min(\left|x_{A}-x_{B}\right|, \left|y_{A}-y_{B}\right|,\left|z_{A}-z_{B}\right|) $μ΄λ€.
λ―Όνμ΄λ ν°λμ μ΄ $ N-1 $κ° κ±΄μ€ν΄μ λͺ¨λ νμ±μ΄ μλ‘ μ°κ²°λκ² νλ €κ³ νλ€. μ΄λ, λͺ¨λ νμ±μ ν°λλ‘ μ°κ²°νλλ° νμν μ΅μ λΉμ©μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
πμ λ ₯
첫째 μ€μ νμ±μ κ°μ $ N $μ΄ μ£Όμ΄μ§λ€. $ \left ( 1 \leq N \leq 100,000 \right ) $ λ€μ $ N $κ° μ€μλ κ° νμ±μ x,y,z μ’νκ° μ£Όμ΄μ§λ€.
μ’νλ $ -10^{9} $λ³΄λ€ ν¬κ±°λ κ°κ³ , $ 10^{9} $λ³΄λ€ μκ±°λ κ°μ μ μμ΄λ€. ν μμΉμ νμ±μ΄ λ κ° μ΄μ μλ κ²½μ°λ μλ€.
πμΆλ ₯
첫째 μ€μ λͺ¨λ νμ±μ ν°λλ‘ μ°κ²°νλλ° νμν μ΅μ λΉμ©μ μΆλ ₯νλ€.
π λ¬Έμ νμ΄
λͺ¨λ νμ±μ x, y, z μ’νκ° μ£Όμ΄μ§λ€.
νμ± Aμμ νμ± Bλ‘ κ°λ ν°λμ λΉμ©μ΄ $ min(\left|x_{A}-x_{B}\right|, \left|y_{A}-y_{B}\right|,\left|z_{A}-z_{B}\right|) $ μ΄λ©΄ Aμμ λ€λ₯Έ νμ±κΉμ§ κ°λ κ²½λ‘λ λͺ¨λ νμΈν΄μΌ ν κΉ?
λλ΅μ μλλ€.
λ μ’νμ μ°¨μ μ λκ°μ μ΅μλ‘ νλ €λ©΄ μ λ ¬ν ν λ°λ‘ μμ μλ μ’νλ λΉΌλ©΄ μ λκ°μ μ΅μλ‘ ν μ μλ€.
λλ¬Έμ Aμμ λ€λ₯Έ νμ±κΉμ§ κ°λ κ²½λ‘λ x,y,zλ‘ κ°κ° μ λ ¬νμ λ μ΄μν κ²λ€μ λΊ μ λκ°μΌλ‘ κ²½λ‘λ₯Ό λλ©΄ Aμμ λ€λ₯Έ νμ±μΌλ‘ κ°λ λͺ¨λ κ²½λ‘λ νμΈν νμμλ€.
κ·Έλ κ² μ΅μνμ κ²½λ‘λ§ λ΄μ λ€ ν¬λ£¨μ€μΉΌ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ μ΅μ μ€ν¨λ νΈλ¦¬λ₯Ό λ§λ€μλ€.
π» μ½λ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import sys, heapq input = sys.stdin.readline def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent,parent[x]) return parent[x] def union_parent(parent,a,b): a = find_parent(parent,a) b = find_parent(parent,b) if a<b: parent[b] = a else: parent[a] = b n = int(input()) all_path = [] sort_x = [] sort_y = [] sort_z = [] parent = [i for i in range(n)] for i in range(n): x,y,z = map(int,input().split()) heapq.heappush(sort_x, [x,y,z,i]) heapq.heappush(sort_y, [y,z,x,i]) heapq.heappush(sort_z, [z,x,y,i]) pre_x = heapq.heappop(sort_x) pre_y = heapq.heappop(sort_y) pre_z = heapq.heappop(sort_z) for _ in range(n-1): aft_x = heapq.heappop(sort_x) aft_y = heapq.heappop(sort_y) aft_z = heapq.heappop(sort_z) heapq.heappush(all_path, [abs(pre_x[0]-aft_x[0]),pre_x[-1], aft_x[-1]]) # κ°λ λΉμ©, i->j heapq.heappush(all_path, [abs(pre_y[0]-aft_y[0]),pre_y[-1], aft_y[-1]]) heapq.heappush(all_path, [abs(pre_z[0]-aft_z[0]),pre_z[-1], aft_z[-1]]) pre_x = aft_x pre_y = aft_y pre_z = aft_z ans = 0 edges = 0 while all_path: cost, a,b = heapq.heappop(all_path) if find_parent(parent,a) != find_parent(parent,b): ans += cost union_parent(parent,a,b) edges += 1 if edges==n-1: break print(ans) | cs |
π μνμ°©μ€
νλ Έλ μ΄μ λ find_parent() ν¨μ ꡬν λΆλΆμ μ€μκ° μμλ€.
π λ¬Έμ λ§ν¬ νμ± ν°λ
'Problem Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 13164λ²: ν볡 μ μΉμ - μλ° (0) | 2022.10.09 |
---|---|
[λ°±μ€] 14621λ²: λλ§ μλλ μ°μ - νμ΄μ¬ (1) | 2022.10.08 |
[λ°±μ€] 16932_λͺ¨μλ§λ€κΈ° - νμ΄μ¬ (1) | 2022.09.30 |
[λ°±μ€] 11780λ²: νλ‘μ΄λ 2 - Python (0) | 2022.09.22 |
[λ°±μ€] 14567λ²: μ μκ³Όλͺ© (Prerequisite) - νμ΄μ¬ (0) | 2022.09.18 |