λ°±μ€ 1717: μ§ν©μ νν (Python)
https://www.acmicpc.net/problem/1717
1717λ²: μ§ν©μ νν
첫째 μ€μ n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. mμ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ μ°μ°μ κ°μμ΄λ€. λ€μ mκ°μ μ€μλ κ°κ°μ μ°μ°μ΄ μ£Όμ΄μ§λ€. ν©μ§ν©μ 0 a bμ ννλ‘ μ λ ₯μ΄ μ£Όμ΄μ§λ€. μ΄λ
www.acmicpc.net
μ΄μ½ν μμ νμλ λ¬Έμ κ·Έλλ‘ λμλ€.
https://sssbin.tistory.com/193
κ·Έλμ μκ³ λ¦¬μ¦ λ€μ μ 리νλ€λ λ§μμΌλ‘ λ΄ μμΌλ‘ μ§μ νμμ§λ§ ,, μκ° μ΄κ³Όλ‘ μ€ν¨
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, m = map(int, input().split())
parent = [0] * (n+1)
for i in range(1, n+1):
parent[i] = i
for _ in range(m):
c, a, b = map(int, input().split())
if c == 0: # ν©μ§ν©
union_parent(parent, a, b)
else: # κ°μ μ§ν©μΈμ§ νμΈ
if find_parent(parent, a) == find_parent(parent, b):
print("YES")
else:
print("NO")
μ λ ₯ κ°μ΄ λ§μΌλκΉ (1 ≤ m ≤ 100,000)
μμ€ν μ μΆλ ₯μ μ΄μ©ν΄μ κ°μ μ λ ₯λ°λλ‘ λ°κΏ¨λλ° (μλ μ½λ μΆκ°)
import sys
input = sys.stdin.readline
μ¬κ· λ°νμ μλ¬κ° λ°μνλ€.
νμ΄μ¬μμ μ¬κ·λ₯Ό μ¬μ©νλ λ¬Έμ λ κΈ°λ³ΈμΌλ‘ μ€μ λμ΄ μλ μ¬κ· κΉμ΄κ° μμμ μ¬κ· κΉμ΄ μ νμ νμ΄μ€μΌ νλ€κ³ ν¨,,
κ·Έλ¦¬κ³ λ€μ λ΄ μ½λλ λ¬Έμ λ₯Ό μ΄ν΄λ³΄λ€κ° λμΉ λΆλΆμ λ°κ²¬νλ€.
μ΄κΈ°μ {0}, {1}, {2}, ... {n} μ΄ κ°κ° n+1κ°μ μ§ν©μ μ΄λ£¨κ³ μλ€.
parent 리μ€νΈ μ΄κΈ°νλ₯Ό μΈλ±μ€ 1λΆν° ν΄μ€¬λλ° μ«μκ° 0λΆν° μμ.!!!! κ·Έλμ μ¬κ· μ ν λλ €μ£Όκ³ (nμ μ΅λ λ²μλ‘ μ€μ ) 리μ€νΈ μ΄κΈ°ν λΆλΆ λ°λ³΅λ¬Έ λ²μλ₯Ό λ°κΏμ€¬λ€.
# μΆκ°
sys.setrecursionlimit(1000000)
# μμ
parent = [0] * (n+1)
for i in range(n+1):
parent[i] = i
λλμ΄ μ .λ΅. π₯
<μ΅μ’ μ½λ>
import sys
sys.setrecursionlimit(1000000)
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, m = map(int, input().split())
parent = [0] * (n+1)
for i in range(n+1):
parent[i] = i
for _ in range(m):
c, a, b = map(int, input().split())
if c == 0: # ν©μ§ν©
union_parent(parent, a, b)
else: # κ°μ μ§ν©μΈμ§ νμΈ
if find_parent(parent, a) == find_parent(parent, b):
print("YES")
else:
print("NO")