https://www.acmicpc.net/problem/1976
1976λ²: μ¬ν κ°μ
λνμ΄λ μΉκ΅¬λ€κ³Ό ν¨κ» μ¬νμ κ°λ €κ³ νλ€. νκ΅μλ λμκ° Nκ° μκ³ μμμ λ λμ μ¬μ΄μ κΈΈμ΄ μμ μλ, μμ μλ μλ€. λνμ΄μ μ¬ν μΌμ μ΄ μ£Όμ΄μ‘μ λ, μ΄ μ¬ν κ²½λ‘κ° κ°λ₯ν κ²μΈ
www.acmicpc.net
λ¬Έμ μ ν΄κ²°λ²μ μ½κ² μκ°ν΄λΌ μ μμλ€.
μ λ ₯λ μ¬ν κ³νμ λμλ€μ΄ μλ‘ μ°κ²°λμ΄ μλμ§λ§ νμΈνλ©΄ λλ€.
λμλ€μ μ°κ²° μ 보λ₯Ό μ λ ₯λ°μ λ 1μ΄λ©΄ unionν΄μ€λ€.
κ³νμ μ λ ₯λ°μ ν μκ°μ μ€μ΄κΈ° μν΄ λ¦¬μ€νΈμμ μ€λ³΅ μμλ₯Ό μ κ±°ν΄μ£Όκ³
findλ₯Ό ν΅ν΄ λͺ¨λ κ°μ λΆλͺ¨λ₯Ό κ°μ§κ³ μλμ§(= νλμ μ§ν©μΈμ§) νμΈν΄μ£Όλ©΄ λλ€.
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 = int(input())
m = int(input())
parent = [0] * (n+1)
for i in range(1, n+1):
parent[i] = i
cities = []
for i in range(n):
cities.append(list(map(int, input().split())))
for j in range(n):
if cities[i][j] == 1:
union_parent(parent, i+1, j+1)
plan = list(map(int, input().split()))
plan_set = set(plan) # μ€λ³΅ μ κ±°
check = find_parent(parent, plan[0])
for i in plan_set:
if find_parent(parent, i) != check:
print("NO")
exit(0)
print("YES")
'π€ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ°±μ€ 1197: μ΅μ μ€ν¨λ νΈλ¦¬ (Python) (0) | 2022.07.29 |
---|---|
λ°±μ€ 4195: μΉκ΅¬ λ€νΈμν¬ (Python) (0) | 2022.07.28 |
λ°±μ€ 1717: μ§ν©μ νν (Python) (0) | 2022.07.28 |
λ°±μ€ 11657: νμλ¨Έμ (Python) (0) | 2022.07.18 |
λ°±μ€ 1504: νΉμ ν μ΅λ¨ κ²½λ‘ (Python) (0) | 2022.07.12 |