- μμ½λ
- go
- μ¬κ·
- C++
- golang
- ν리μ¨λ³΄λ©
- λΉνΈλ§μ€νΉ
- λ°±μ€
- LCs
- nestjs
- μν°λ
- DP
- js
- μΉ΄μΉ΄μ€ μ½ν
- BFS
- Python
- λΉνΈλ§΅
- Union-Find
- μΉλ¦°μ΄
- μκ³ λ¦¬μ¦
- νλ‘κ·Έλλ¨Έμ€
- λμ νλ‘κ·Έλλ°
- DFS
- μΉ΄μΉ΄μ€2021
- λ°±μλ ν리μ¨λ³΄λ©
- λ€μ΅μ€νΈλΌ
- μ¬λΌμ΄λ© μλμ°
- κ°μ₯κ°κΉμ΄κ³΅ν΅μ‘°μ
- νΈλ¦¬
- μ΄λΆνμ
- Today
- Total
Hello Ocean! πΌ
[λ°±μ€/Python] 20040. μ¬μ΄ν΄ κ²μ λ³Έλ¬Έ
λ¬Έμ
https://www.acmicpc.net/problem/20040
μ¬μ΄ν΄ κ²μμ λ λͺ μ νλ μ΄μ΄κ° μ°¨λ‘λλ‘ λμκ°λ©° μ§ννλ κ²μμΌλ‘, μ νλ μ΄μ΄κ° νμ λ²μ§Έ μ°¨λ‘λ₯Ό, ν νλ μ΄μ΄κ° μ§μ λ²μ§Έ μ°¨λ‘λ₯Ό μ§ννλ€. κ²μ μμ μ 0 λΆν° n − 1 κΉμ§ κ³ μ ν λ²νΈκ° λΆμ¬λ νλ©΄ μμ μ n κ°κ° μ£Όμ΄μ§λ©°, μ΄ μ€ μ΄λ μΈ μ λ μΌμ§μ μμ λμ΄μ§ μλλ€. 맀 μ°¨λ‘ λ§λ€ νλ μ΄μ΄λ λ μ μ μ νν΄μ μ΄λ₯Ό μ°κ²°νλ μ λΆμ κΈλλ°, μ΄μ μ κ·Έλ¦° μ λΆμ λ€μ κ·Έμ μλ μμ§λ§ μ΄λ―Έ κ·Έλ¦° λ€λ₯Έ μ λΆκ³Ό κ΅μ°¨νλ κ²μ κ°λ₯νλ€. κ²μμ μ§ννλ€κ° μ²μμΌλ‘ μ¬μ΄ν΄μ μμ±νλ μκ° κ²μμ΄ μ’ λ£λλ€. μ¬μ΄ν΄ Cλ νλ μ΄μ΄κ° κ·Έλ¦° μ λΆλ€μ λΆλΆμ§ν©μΌλ‘, λ€μ 쑰건μ λ§μ‘±νλ€.
Cμ μν μμμ μ λΆμ ν λμ μμ μΆλ°νμ¬ λͺ¨λ μ λΆμ ν λ²μ©λ§ μ§λμ μΆλ°μ μΌλ‘ λλμμ¬ μ μλ€.
λ¬Έμ λ μ λΆμ μ¬λ¬ κ° κ·Έλ¦¬λ€ λ³΄λ©΄ μ¬μ΄ν΄μ΄ μμ± λμλμ§μ μ¬λΆλ₯Ό νλ¨νκΈ° μ΄λ €μ μ΄λ―Έ μ¬μ΄ν΄μ΄ μμ±λμμμλ λΆκ΅¬νκ³ κ²μμ κ³μ μ§ννκ² λ μ μλ€λ κ²μ΄λ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ κ²μμ μ§ν μν©μ΄ μ£Όμ΄μ§λ©΄ λͺ λ²μ§Έ μ°¨λ‘μμ μ¬μ΄ν΄μ΄ μμ±λμλμ§, νΉμ μμ§ κ²μμ΄ μ§ν μ€μΈμ§λ₯Ό νλ¨νλ νλ‘κ·Έλ¨μ μμ±νλ € νλ€.
μ λ ₯μΌλ‘ μ μ κ°μ nκ³Ό m λ²μ§Έ μ°¨λ‘κΉμ§μ κ²μ μ§ν μν©μ΄ μ£Όμ΄μ§λ©΄ μ¬μ΄ν΄μ΄ μμ± λμλμ§λ₯Ό νλ¨νκ³ , μμ±λμλ€λ©΄ λͺ λ²μ§Έ μ°¨λ‘μμ μ²μμΌλ‘ μ¬μ΄ν΄μ΄ μμ±λ κ²μΈμ§λ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ λ ₯μ νμ€μ λ ₯μ μ¬μ©νλ€. μ λ ₯μ 첫 λ²μ§Έ μ€μλ μ μ κ°μλ₯Ό λνλ΄λ μ μ 3 ≤ n ≤ 500,000 κ³Ό μ§νλ μ°¨λ‘μ μλ₯Ό λνλ΄λ μ μ 3 ≤ m ≤ 1,000,000 μ΄ μ£Όμ΄μ§λ€. κ²μμμ μ¬μ©νλ nκ°μ μ μλ 0 λΆν° n − 1 κΉμ§ κ³ μ ν λ²νΈκ° λΆμ¬λμ΄ μμΌλ©°, μ΄ μ€ μ΄λ μΈ μ λ μΌμ§μ μμ λμ΄μ§ μλλ€. μ΄μ΄μ§λ m κ°μ μ λ ₯ μ€μλ κ°κ° iλ²μ§Έ μ°¨λ‘μ ν΄λΉ νλ μ΄μ΄κ° μ νν λ μ μ λ²νΈκ° μ£Όμ΄μ§λ€ (1 ≤ i ≤ m).
μΆλ ₯
μΆλ ₯μ νμ€μΆλ ₯μ μ¬μ©νλ€. μ λ ₯μΌλ‘ μ£Όμ΄μ§ μΌμ΄μ€μ λν΄, m λ²μ§Έ μ°¨λ‘κΉμ§ κ²μμ μ§νν μν©μμ μ΄λ―Έ κ²μμ΄ μ’ λ£λμλ€λ©΄ μ¬μ΄ν΄μ΄ μ²μμΌλ‘ λ§λ€μ΄μ§ μ°¨λ‘μ λ²νΈλ₯Ό μμ μ μλ‘ μΆλ ₯νκ³ , m λ²μ μ°¨λ‘λ₯Ό λͺ¨λ μ²λ¦¬ν μ΄νμλ μ’ λ£λμ§ μμλ€λ©΄ 0μ μΆλ ₯νλ€.
νμ΄
Union - Find μκ³ λ¦¬μ¦μ λΆλͺ¨λ₯Ό μ μ₯νλ λ°©μμΌλ‘ νΈλ¦¬λ₯Ό μ΄μ©νμ¬ κ΅¬ννμλ€.
μΆκ°λ‘ sizeλ°°μ΄μ μ¬μ©νμ¬, λ νΈλ¦¬λ₯Ό λ¨Έμ§ν λ sizeκ° μμ μͺ½μ ν° μͺ½ λ°μ λ¬μμ£Όμλ€.
size[i] : i λ Έλμ μμ μ
μ½λ
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
# λΆλͺ¨λ₯Ό λνλ΄λ λ°°μ΄
parent = [i for i in range(N)]
size = [1 for i in range(N)]
def find(n):
if (parent[n] == n):
return n
else:
parent[n] = find(parent[n])
return parent[n]
def union(a, b):
a = find(a)
b = find(b)
if size[a] > size[b]: # aλ°μ bλ₯Ό λ¬μμ€λ€ = bμ λΆλͺ¨λ₯Ό aλ‘ μ€μ
parent[b] = a
size[a] += size[b]
else: # b λ°μ aλ₯Ό λ¬μμ€λ€ = aμ λΆλͺ¨λ₯Ό bλ‘ μ€μ
parent[a] = b
size[b] += size[a]
sys.setrecursionlimit(10 ** 9)
isDone = False
for m in range(1,M+1):
a, b = map(int, input().split())
if find(a) == find(b):
print(m)
isDone = True
break
union(a,b)
if not isDone:
print(0)
κ²°κ³Ό
μ°Έκ³
pythonμ΄ μκ°μ΄ μ€λ κ±Έλ €μ κ·Έλ°μ§,
μκ³ λ¦¬μ¦μ μ§μ λμΌνλλ° μκ°μ μ€μ΄κΈ° μν΄ μμν κ²λ€μ μΆκ°ν΄μΌνλ€.
1. sys.setrecursionlimit(10 ** 9) μΆκ°
μ¬κ· ν¨μ κΉμ΄λ₯Ό μ νν΄μ μκ°μ μ€μΌ μ μλ μ½λμ΄λ€.
2. find(a) == find(b) λ₯Ό unionν¨μ λ΄μμ νκ³ μΆμλλ°, μκ°μ΄κ³Όλ‘ μΈν΄ λ°μΌλ‘ λΉΌμΌνλ€.
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/C++] 1013. Contact (0) | 2021.10.26 |
---|---|
[λ°±μ€/Python] 7579. μ± (0) | 2021.10.12 |
[CS/μκ³ λ¦¬μ¦] κ±°μ μ λ ¬λ Listμμ μ΄λ€ μ λ ¬μ΄ κ°μ₯ ν¨μ¨μ μΌκΉ? (0) | 2021.10.09 |
[CS/μλ£κ΅¬μ‘°] μ΄μ§ νμ νΈλ¦¬ (BST) (0) | 2021.10.09 |
[λ°±μ€/Python] 1501. μμ΄ μ½κΈ° (0) | 2021.10.06 |