λ¬Έμ
https://www.acmicpc.net/problem/1976
νμ΄
# λ°±μ€ 1976λ² λ¬Έμ - μ¬ν κ°μ
import sys
sys.setrecursionlimit(10 ** 6)
# aκ° μν μ§ν©κ³Ό bκ° μν μ§ν© ν©μΉκΈ°
def union(x, y):
x = find(x)
y = find(y)
# aμ bμ λΆλͺ¨ λ
Έλκ° κ°μΌλ©΄ λμΌν μ§ν©μ΄λ―λ‘ λ¦¬ν΄
if x == y:
return
# λΆλͺ¨ λ
Έλκ° λ€λ₯΄λ€λ©΄ λ μ§ν©μ ν©μΉλ€.
else:
parent[y] = x
# λΆλͺ¨ λ
Έλ μ°ΎκΈ°
def find(target):
# μκΈ° μμ μ΄ λΆλͺ¨ λ
Έλμ΄λ©΄ μκΈ° μμ μ 리ν΄
if target == parent[target]:
return target
# λΆλͺ¨ λ
Έλλ₯Ό μ¬κ·ν¨μλ₯Ό ν΅ν΄ μ°Ύλλ€.
parent[target] = find(parent[target])
# μμ μ λΆλͺ¨ λ
Έλλ₯Ό 리ν΄
return parent[target]
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
parent = [0] * (n + 1)
for k in range(1, n + 1):
parent[k] = k
for i in range(1, n + 1):
# κ·Έλνλ‘ νν
graph = list(map(int, sys.stdin.readline().split()))
# νμ¬ λμμ μ°κ²°λμ΄ μλ λμλ₯Ό νμΈ
for j in range(1, len(graph) + 1):
if graph[j - 1] == 1:
union(i, j) # λκ°μ λμλ₯Ό ν©μΉ©ν©μΌλ‘ νν
# μ¬ν κ³ν
tour = list(map(int, sys.stdin.readline().split()))
# set() ν¨μλ₯Ό ν΅ν΄ ν©μ§ν©μ μ°Ύλλ€. μ¦, λͺ¨λ λμκ° μ°κ²°λμ΄ μλμ§ νμΈνλ€.
res = set([find(i) for i in tour])
# res μ κΈΈμ΄κ° 1μΌ κ²½μ° λͺ¨λ λμκ° μ°κ²°λμ΄ μλ€λ κ²μ΄λ€.
if len(res) == 1:
print('YES')
else:
print('NO')
Union-Find μκ³ λ¦¬μ¦μ μ¬μ©νλ λ¬Έμ μ΄λ€.
union-find μκ³ λ¦¬μ¦μ μ λͺ°λΌμ ν΄κ²°νμ§ λͺ»νμ¬μ ꡬκΈλ§μ ν΅ν΄ λ¬Έμ λ₯Ό νμλ€.
μμ§ μ΄ν΄κ° νμν κ² κ°λ€.
μΆμ²: https://fre2-dom.tistory.com/207
'ποΈ Algorithm > π© λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π© [λ°±μ€] [Python] [Gold4] 15683λ²_κ°μ (0) | 2023.04.05 |
---|---|
π© [λ°±μ€] [Python] [Silver3] 1213λ²_ν°λ¦°λ둬 λ§λ€κΈ° (0) | 2023.04.04 |
π© [λ°±μ€] [Python] [Gold4] 9935λ²_λ¬Έμμ΄ νλ° (0) | 2023.04.03 |
π© [λ°±μ€] [Python] [Gold4] 1806λ²_λΆλΆν© (0) | 2023.04.01 |
π© [λ°±μ€] [Python] [Silver2] 11722λ²_κ°μ₯ κΈ΄ κ°μνλ λΆλΆ μμ΄ (0) | 2023.03.31 |