[λ°±μ€] 2653λ²: μμ λ μ§λ¨ - νμ΄μ¬
λ¬Έμ
https://www.acmicpc.net/problem/2653
2653λ²: μμ λ μ§λ¨
μ£Όμ΄μ§ μ λ ₯μ΄ μμ λμ§ μμ μ§λ¨μ κ²½μ°λ 첫μ€μ λΉμΉΈ μμ΄ 0μ μΆλ ₯νλ€. μμ λ μ§λ¨μ κ²½μ°λ 첫μ€μ μλ‘ μ’μνλ μμ§λ¨μ μλ₯Ό λΉμΉΈ μμ΄ μΆλ ₯νκ³ , κ·Έ λ€μ μ€λΆν°λ κ° μ€λ§λ€ κ° μ
www.acmicpc.net
ν΄μ€
λ¬Έμ μ€λͺ κ³Ό μ‘°κ±΄μ΄ λ³΅μ‘νκ³ κΈΈκ² μ€λͺ λμ΄ μλλ°, ν΅μ¬μ κ°λ¨νλ€.
1. μ¬λ κ°μ μ°νΈλκ° λ€λ₯΄λ©΄ λΆμμ ν μ§λ¨μ΄λ€.
μ΄ λΆλΆμ κ°μ μ μΌλ‘ νννκ³ μλλ°, μλ‘ μ’μνλ μ¬λλΌλ¦¬ κ·Έλ£Ήμ λλλ©΄ μμ λ μ§λ¨μ λ§λ€ μ μλλ° μλ‘μ μ°νΈλκ° λ€λ₯΄λ©΄ κ·Έλ£Ήμ λλ μκ° μλ€.
2. DFSλ‘ νμνλ©΄μ κ·Έλ£Ήννκ³ κ·Έ κ²°κ³Όλ₯Ό μ μ₯νλ€.
ν λ²μ DFS νμμμ μ°Ύμμ§λ μ¬λμ κ°μ κ·Έλ£Ήμ΄λ€.
νμ΄
import sys; readline = sys.stdin.readline
n = int(readline())
relation = [list(map(int, readline().split())) for _ in range(n)]
stable = True
for i in range(n):
for j in range(i + 1, n):
if relation[i][j] != relation[j][i]:
stable = False
break
if not stable: break
visited = [False] * n
group = []
count = 0
for i in range(n):
if visited[i]:
continue
visited[i] = True
count += 1
group.append([i+1])
g_index = count - 1
for j in range(n):
if relation[i][j] != 0 or i == j:
continue
group[g_index].append(j+1)
visited[j] = True
for g in group:
if len(g) < 2:
stable = False
break
if stable:
print(count)
for g in group:
print(*g)
else:
print(0)