π λ¬Έμ
BOJμ μΈκΈ°μ€ν, λ°©μ‘μΈ κΆμ±μ λ ν΅μ νμ¬μ μ·¨μ νλ€. νμ¬ μ΄ ν΅μ νμ¬λ λ무λ ν° ν΅μ λ§μ ν μ§μ¬μμ κ΄λ¦¬νλλΌ ν° λΉμ©μ μ§λΆνκ³ μμλ€. κ·Έλμ νμ¬λ μ΅κ·Ό ITμ νΈλ λ μ€ νλμΈ 'νμ€μν'μ νΈμΉνμ¬, ν΅μ λ§μ λΆν νλλ‘ κ²°μ νλ€. κ·Έλμ μ±μ νν ν΅μ λ§μ λΆν ν λ λ°μνλ λΉμ©μ λΆμνλλ‘ μ§μνλ€.
νμ¬ νμ¬ λ§μλ 1λ²λΆν° Nλ²κΉμ§ μ΄ Nκ°μ ν΅μ νμ΄ μ‘΄μ¬νλ©°, ν΅μ ν κ°μ μ°κ²°μ΄ Mκ° μ‘΄μ¬νλ€. μ΄λ νμ¬μμλ μ΄ Qλ² ν΅μ ν κ°μ μ°κ²°μ μ κ±°ν¨μΌλ‘μ¨ νλμ ν΅μ λ§μ μ¬λ¬ κ°μ ν΅μ λ§μΌλ‘ λΆλ¦¬νλ €κ³ νλ€. ν΅μ λ§μ΄λ, ν΅μ νμ μ°κ²°μ ν΅ν΄ λλ¬ κ°λ₯ν ν΅μ νλ€μ μ§ν©μ΄λ€. ν΅μ ν κ°μ μ°κ²° κ΄κ³λ₯Ό μ κ±°ν λ λλ λΉμ©μ μ κ±°ν ν ν΅μ λ§μ΄ λ κ°λ‘ λλμ΄μ§λ€λ©΄ λλ μ§ λ κ°μ ν΅μ λ§μ μν ν΅μ νλ€μ κ°―μμ κ³±μ΄ λλ©°, λλμ΄μ§μ§ μμ κ²½μ° 0μ΄λ€.
κ·Έλ¦Ό 1μ μμλ‘ ν λ, μ°κ²° (3, 4)λ₯Ό μ κ±°νλ©΄ {1, 2, 3}, {4, 5, 6}μΌλ‘ λΆν λλ©°, μ΄λ λ°μνλ λΉμ©μ 3 × 3 = 9κ° λλ€. λμ μ°κ²° (2, 3)μ μ κ±°νλ©΄, λ§μ΄ λλ μ§μ§ μμκΈ°μ λΉμ©μ 0μ΄ λλ€.
μ±μ λ νμ¬μ μμ²μ λ°λΌ Qλ²μ μ κ±°λ₯Ό ν΅ν΄ λμ€λ λΉμ©μ ν©μ ꡬν΄μΌ νλ€. νμ§λ§ μ±μ λ νμ¬μ ν΅μ λ§μ μ΄μ©ν΄ λ°©μ‘νκΈ° λ°μκΈ° λλ¬Έμ μ°λ¦¬κ° λμμ£Όμ.
πμ λ ₯
첫 λ²μ§Έ μ€μλ ν΅μ νμ κ°μμΈ μμ°μ N, ν΅μ ν μ¬μ΄μ μ°κ²°μ κ°μμΈ μμ°μ M, ν΅μ λ§ μ°κ²° λΆν νμμΈ μμ°μ Qκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 100,000, 1 ≤ Q ≤ M)
λ λ²μ§Έ μ€λΆν° Mκ°μ μ€μ κ±Έμ³ λ κ°μ μμ°μ X, Yκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. μ΄λ X ν΅μ νκ³Ό Y ν΅μ ν μ¬μ΄μ μ°κ²°μ΄ μμμ λ»νλ€. (1 ≤ X, Y ≤ N, X ≠ Y)
μ€λ³΅λ μ°κ²°μ μ£Όμ΄μ§μ§ μμΌλ©°, λͺ¨λ ν΅μ νμ μ²μμ νλμ ν΅μ λ§μ μνλ€. 쑰건μ μν΄ μκΈ° μμ κ³Ό μ°κ²°μ΄ μλ ν΅μ νμ μλ€.
κ·Έ λ€μ μ€λΆν° Qκ°μ μ€μ κ±Έμ³ μ κ±°λ μ°κ²°μ λ²νΈμΈ μμ°μ Aκ° μ£Όμ΄μ§λ€. μ΄λ Aλ²μ§Έλ‘ μ λ ₯λ (X, Y)μ μ°κ²°μ΄ μ κ±°λμμμ μλ―Ένλ€. (1 ≤ A ≤ M)
μ΄λ―Έ μ κ±°λ μ°κ²°μ λ€μ μ κ±°λμ§ μμΌλ©°, μ κ±°λ μ λ ₯ μμλλ‘ μ§νλλ€.
πμΆλ ₯
첫 λ²μ§Έ μ€μ Qκ°μ μ°κ²°μ μμλλ‘ μ κ±°νλλ° λλ λΉμ©μ ν©μ μΆλ ₯νλ€.
π λ¬Έμ νμ΄
λ¬Έμ κ° μ¬λ°μ΄μ μ€λλ§μ νμ΄κΈμ μμ±νλ€.
μ λμ¨ νμΈλλ₯Ό μ¬μ©ν΄μ μ½κ² κ°μ μ μ°κ²°νλ λ°©λ²μ λ°°μ μ§λ§, λ°λλ‘ κ°μ μ μ κ±°νλ λ°©λ²μ μκ°ν΄λ³Έμ μ΄ μμλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κ³ λ―Όν΄λ³΄μλλ°, κ° κ°μ μ κ±°λ§λ€ μ κ±°λ κ°μ λ§κ³ λ€λ₯Έ κ²½λ‘λ₯Ό ν΅ν΄μ μ΄λμ΄ κ°λ₯νμ§ νμμ ν΄μΌνκΈ° λλ¬Έμ μκ° λ³΅μ‘λ $O(V+E)$ μ $Q$ λ² μννλ―λ‘ μκ°μ΄κ³Όκ° λ°μνλ€.
νμ§λ§ κ°μ μ μ κ±°νλ κ²μ΄ μλλΌ μ°κ²°νλ κ²μΌλ‘λ μ΄ λ¬Έμ λ ν΄κ²° κ°λ₯νλ€.
Qκ°μ μ°κ²°λ κ°μ μ μ§μ°λλ°, λ€μ λ§νλ©΄ M - Q μ κ°μ μ μ§μμ§μ§ μλλ€. μ λ ₯λ Qκ°μ κ°μ μ μ μΈνκ³ M - Qκ°μ κ°μ μ μ΄μ΄μ€λ€.
νμ¬ μνλ Qκ°μ κ°μ μ λͺ¨λ μ§μ°κ³ λ λ€μ κ·Έλνμ΄λ€.
μ§μμΌ νλ Qκ°μ κ°μ μ€ μ μΌ λ§μ§λ§ κ°μ $X$ μ μν΄ μ°κ²°λμ΄ μλ Aμ Bμ λΆλͺ¨κ° κ°λ€λ©΄ κ°μ $X$λ₯Ό μ§μλ μ΄ λμ μ°κ²°λμ΄ μλ€λ λ»μ΄λ€. λ°λλ‘ λΆλͺ¨κ° λ€λ₯΄λ€λ©΄ $X$κ° μ κ±°λ¨μΌλ‘μ¨ λμ΄ λλ μ‘λ€λ κ²μ μλ―Ένλ€.
μ΄ μ μ μ΄μ©νμ¬ Qκ°μ κ°μ μ μ°κ²°νλ μμ μ κ±°κΎΈλ‘ μ§ννλ€.
κ°κ°μ λ Έλλ§λ€ μ°κ²°λμ΄ μλ λ Έλμ κ°―μλ λ°λ‘ μ μ₯νλ€.
π» μ½λ
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 | from sys import stdin input = stdin.readline def find(x:int, parent:list[int]) -> int: if x != parent[x]: parent[x] = find(parent[x], parent) return parent[x] def union(a:int, b:int, parent:list[int]) -> None: a = find(a, parent) b = find(b, parent) if a < b: parent[b] = a cost[a] += cost[b] elif a > b: parent[a] = b cost[b] += cost[a] n,m,q = map(int,input().split()) graph = [[] for _ in range(n+1)] tree = [] edges = [tuple(map(int,input().split())) for _ in range(m)] tmp = [False]*m cut = [] parent = [i for i in range(n+1)] cost = [1 for _ in range(n+1)] for _ in range(q): k = int(input())-1 cut.append(k) tmp[k] = True for i in range(m): if not tmp[i]: x,y = edges[i] if find(x, parent) != find(y, parent): union(x,y,parent) ans = 0 for i in range(q-1, -1, -1): x,y = edges[cut[i]] if find(x, parent) != find(y, parent): # λμ λΆλͺ¨κ° λ€λ₯΄λ€λ©΄ μ΄κ±΄ μ΄μ΄μ‘λκ² ans += cost[find(x, parent)] * cost[find(y, parent)] union(x,y,parent) print(ans) | cs |
π μνμ°©μ€
첫λ²μ§Έ νλ Έλ μ΄μ λ κ°κ° λ Έλλ§λ€ μ°κ²°λμ΄ μλ λ Έλμ μλ₯Ό νμΈν λ μ€μκ° μμλ€.
π λ¬Έμ λ§ν¬ ν΅μ λ§ λΆν
'Problem Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 17132λ²: λλμ§κ° μ 보μ¬μ μ¬λΌμ¨ μ΄μ - νμ΄μ¬ (0) | 2023.08.06 |
---|---|
[λ°±μ€] 2637λ²: μ₯λκ° μ‘°λ¦½ - νμ΄μ¬ (0) | 2023.07.30 |
[λ°±μ€] 18171: ABB (0) | 2023.05.15 |
[λ°±μ€] λ°±μ€ λλ€ λνμ€ (0) | 2023.05.09 |
[λ°±μ€] 23291λ²: μ΄ν μ 리 (0) | 2023.04.02 |