π λ¬Έμ
λλμ§κ° μ 보μ¬μ μ¬λΌμλ€!
λλμ§λ μ λ³΄μ¬ μ§νμ μ¬λ¬ μ±μ μνμ μμ νκ³ μλ€. λλμ§λ μ§ μ¬μ΄λ₯Ό μ€κ°λ κ±Έ μ’μνλ€. μ 보μ¬μλ μ΄ Nκ°μ λλμ§ μ§μ΄ μμΌλ©° μ΄ μ§λ€μ N-1κ°μ κΈΈλ‘ μ°κ²°λμ΄ μλ€. μμμ μ§μμ λ λ€λ₯Έ μ§μΌλ‘ κ°λ κ²½λ‘λ νμ μ μΌνκ² νλλ§ μ‘΄μ¬νλ€. μ¦, λλμ§ μ§λ€μ νΈλ¦¬ ννλ‘ λͺ¨λ μ°κ²°λμ΄ μλ€. μ΄λ€ κΈΈμ μ§λ λ, λλμ§λ Wλ§νΌμ λ§μ‘±λλ₯Ό μ»λλ€.
μ΄λ λ , μλμ κ·Έλ¦Όκ³Ό κ°μ μ§μ κ°μ§ λλμ§λ μ§1μμ μ§4λ‘ μ΄λνλ€. μ΄λ κ±°μΉκ² λλ μ§μ (1 → 2 → 3 → 4)μ΄λ€. λλμ§λ ν λ² μ΄λν λλ§λ€, μ΄λκ²½λ‘μ ν¬ν¨λλ λ§μ‘±λλ€ μ€μμ κ°μ₯ μ΅μμΈ λ§μ‘±λλ₯Ό μ»λλ€. μ¦, (1 → 4)μ κ²½μ°μλ λ§μ‘±λλ₯Ό 2λ§νΌ, (6 → 2)μ κ²½μ°μλ λ§μ‘±λλ₯Ό 3λ§νΌ μ»κ² λλ€.
λλμ§λ κ°μκΈ° λͺ¨λ μ§μ μ (a, b)μ λν μ΄λμ λλμ λ μ»μ μ μλ λ§μ‘±λμ μ΄ν©μ΄ μΌλ§μΈμ§ κΆκΈν΄μ‘λ€. (a, b)μ (b, a)λ κ°μ κ²½λ‘λ‘ μΉλ€. μ¦, μμ κ·Έλ¦Όμ κ²½μ° (1-2, 1-3, 1-4, 1-5, 1-6, 2-3, 2-4, 2-5, 2-6, 3-4, 3-5, 3-6, 4-5, 4-6, 5-6)λ₯Ό λͺ¨λ μ΄λνμλ μ»λ λ§μ‘±λμ μ΄ν©μ λ§νλ€.
νμ§λ§ λλμ§λ κ³μ°νλ€κ° μ§μ³ μ΄λ΄ μ μ λ€κ³ λ§μλ€! μ°©ν μ¬λ¬λΆλ€μ΄ μ λ λλμ§λ₯Ό λμ ν΄ κ³μ°ν΄ μ£Όμ.
πμ λ ₯
첫째 μ€μ μ§μ μ Nμ΄ μ£Όμ΄μ§λ€. (1 ≤ N ≤ 100,000)
μ΄ν N-1κ°μ μ€μ κ±Έμ³ X, Y, Wκ° μ£Όμ΄μ§λ€. μ΄λ μ§ Xμ Yκ° μ°κ²°λμ΄ μκ³ , μ΄ κΈΈμ μ§λ λμ λ§μ‘±λκ° WλΌλ λ»μ΄λ€. (1 ≤ X,Y ≤ N, 1 ≤ W ≤ 200)
πμΆλ ₯
λ¬Έμ μ μ μλ μ΄λμ λλμ λ, λλμ§κ° λλΌλ λ§μ‘±λμ μ΄ν©μ μΆλ ₯νλ€.
π λ¬Έμ νμ΄
ν΄λΉ λ¬Έμ λ μ λμ¨ νμΈλλ₯Ό μ¬μ©ν΄μ ν΄κ²°ν μ μλ€.
μ λ ₯μΌλ‘ μ£Όμ΄μ§λ νΈλ¦¬λ MSTμ΄κ³ κ°κ°μ κ°μ μ λ§μ‘±λλ₯Ό κ°μ§λ€.
μ΄λ κ²½λ‘μ ν¬ν¨λ λ§μ‘±λλ€ μ€μμ κ°μ₯ μ΅μμΈ λ§μ‘±λλ₯Ό μ·¨νλ€λ μ‘°κ±΄μ΄ μμΌλ $u$μ $v$λ₯Ό μλ κ°μ μ λ§μ‘±λκ° $w$μΌ λ, μ΄ $w$κ° ν΄λΉ MSTμ μ΅λμΈ λ§μ‘±λλΌλ©΄ μ΄ κ°μ $u$μ $v$λ₯Ό μ΄μλλ₯Ό μ μΈνκ³ μ¬μ©λμ§ μλλ€. (μ€λ³΅λ κ°μ΄ μλ€λ κ°μ νμ)
λ°λλ‘ μλ₯Ό λ€μ΄λ³΄λ©΄, μ§ν© $a$μ μ§ν© $b$λ₯Ό μλ κ°μ $c$κ° ν΄λΉ νΈλ¦¬μ λν΄ μ΅μμΈ λ§μ‘±λλΌλ©΄ ν΄λΉ λ§μ‘±λλ μ§ν© $a$μ κ°―μ X μ§ν© $b$μ κ°―μ λ§νΌ μ¬μ©λλ€.
μ΄ μ μ μ΄μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νλ©΄ λλ€.
λ΄λ¦Όμ°¨μμΌλ‘ κ°μ μ μ λ ¬νκ³ κ°κ° λ Έλλ§λ€ νμ¬ μ°κ²°λμ΄ μλ λ Έλμ κ°―μλ₯Ό μ μ₯ν΄μ€λ€. κ·Έλ¦¬κ³ unionμ κ°κ°μ κ°―μλ₯Ό κ³±νμ¬ λ§μ‘±λμ μ΄ν©μ μ»μ μ μλ€.
π» μ½λ
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 | import sys input = sys.stdin.readline def find(parent:list[int], x:int) -> int: if parent[x] != x: parent[x] = find(parent, parent[x]) return parent[x] def union(parent:list[int], a:int, b:int, w:int, child: list[int]) -> None: if a < b: parent[b] = a child[a] += child[b] child[b] = child[a] else: parent[a] = b child[b] += child[a] child[a] = child[b] def solve(): n = int(input()) edges = [list(map(int,input().split())) for _ in range(n-1)] edges.sort(key=lambda x:-x[2]) parent = [i for i in range(n+1)] child = [1]*(n+1) ans = 0 for x,y,w in edges: x = find(parent, x) y = find(parent, y) ans += (child[x]*child[y])*w union(parent, x, y, w, child) return ans print(solve()) | cs |
π μνμ°©μ€
μ λμ¨ νμΈλμ μμ΄λμ΄ μ°ΎκΈ°κ° μ¬λ―Έμμλ€.
π λ¬Έμ λ§ν¬ λλμ§κ° μ 보μ¬μ μ¬λΌκ° μ΄μ
'Problem Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1185: μ λ½ μ¬ν (0) | 2023.08.24 |
---|---|
[λ°±μ€] 28457λ²: Every? Only One's Marble - νμ΄μ¬ (0) | 2023.08.13 |
[λ°±μ€] 2637λ²: μ₯λκ° μ‘°λ¦½ - νμ΄μ¬ (0) | 2023.07.30 |
[λ°±μ€] 17398λ²: ν΅μ λ§ λΆν (0) | 2023.07.02 |
[λ°±μ€] 18171: ABB (0) | 2023.05.15 |