βοΈ λ¬Έμ
https://www.acmicpc.net/problem/18352
μ΄λ€ λλΌμλ 1λ²λΆν° Nλ²κΉμ§μ λμμ Mκ°μ λ¨λ°©ν₯ λλ‘κ° μ‘΄μ¬νλ€. λͺ¨λ λλ‘μ 거리λ 1μ΄λ€.
μ΄ λ νΉμ ν λμ Xλ‘λΆν° μΆλ°νμ¬ λλ¬ν μ μλ λͺ¨λ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° μ νν KμΈ λͺ¨λ λμλ€μ λ²νΈλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€. λν μΆλ° λμ Xμμ μΆλ° λμ Xλ‘ κ°λ μ΅λ¨ 거리λ νμ 0μ΄λΌκ³ κ°μ νλ€.
μλ₯Ό λ€μ΄ N=4, K=2, X=1μΌ λ λ€μκ³Ό κ°μ΄ κ·Έλνκ° κ΅¬μ±λμ΄ μλ€κ³ κ°μ νμ.
μ΄ λ 1λ² λμμμ μΆλ°νμ¬ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° 2μΈ λμλ 4λ² λμ λΏμ΄λ€. 2λ²κ³Ό 3λ² λμμ κ²½μ°, μ΅λ¨ κ±°λ¦¬κ° 1μ΄κΈ° λλ¬Έμ μΆλ ₯νμ§ μλλ€.
π€ μ μΆλ ₯ μμ
π§ λμ΄λ/μμ μκ°
β λμ΄λ: solved.ac κΈ°μ€ S2
β μμ μκ°: 14λΆ 49μ΄
β κΆμ₯ μκ°: 1μκ°
π‘ νμ΄
1) λ¬Έμ μ ν νμ
μ μΆλ ₯ μμμ 'μ΅λ¨ 거리' ν€μλλ₯Ό λ³΄κ³ BFS λ¬Έμ λΌλ κ²μ μ μ μμλ€. 9μΌμ°¨μ νΌ λ¬Έμ μ λΉμ·ν μ νμΈ κ² κ°μ νΈλ λ° μ΄λ €μμ μμλ€.
2) μμ΄λμ΄ νλ¦
BFS ꡬνμ μ§κΈκΉμ§ νΌ λ¬Έμ λ€κ³Ό ν° μ°¨μ΄κ° μκΈ° λλ¬Έμ μλ΅νκ³ μΆλ ₯ 쑰건μ μ²λ¦¬νλ λΆλΆμ λν΄μ μ 리ν΄λ³΄λ €κ³ νλ€.
β μ΅λ¨ 거리 KμΈ λμκ° νλλΌλ μλμ§ μ²΄ν¬νκΈ° μν flag λ³μ μ¬μ©
μ΅λ¨ κ±°λ¦¬κ° KμΈ λμκ° μμ μμΌλ©΄ -1μ μΆλ ₯νκ³ κ·Έλ μ§ μμΌλ©΄ λμ λ²νΈλ₯Ό μ€λ¦μ°¨μμΌλ‘ μΆλ ₯ν΄μΌ νλ κ²μ΄ λ¬Έμ μμ μꡬν 쑰건μ΄λ€.
flag = Falseλ‘ λκ³ visited 리μ€νΈλ₯Ό λλ©΄μ κ°μ΄ K+1μΈ μμκ° μμΌλ©΄ flag = Trueλ‘ λ°κΎΌ ν breakλ‘ forλ¬Έμ νμΆνλ€. visited 리μ€νΈλ₯Ό λ€ λμλλ°λ flagκ° FalseλΌλ©΄ μ λ΅μ -1μ΄ λκ³ flagκ° Trueλ©΄ visited 리μ€νΈλ₯Ό ν λ² λ λλ©΄μ κ°μ΄ K+1μΈ μμμ μΈλ±μ€λ₯Ό μΆλ ₯νλ©΄ λλ€.
β‘ β οΈ μ€λ¦μ°¨μμ ν¨μ μ‘°μ¬ β οΈ
μ²μμ μ½λλ₯Ό μ μΆνμ λ μ±μ μ΄ μμ£Ό μ‘°κΈ μ§νλλ€κ° κ°μκΈ° νλ Έμ΅λλ€κ° λ΄λ€. λ‘μ§ μλͺ»λ λΆλΆμ΄ μλλ°? νλ μ€μ 'μ€λ¦μ°¨μ'μμ κΉ¨λ¬μμ μ»λ€..!
# νλ¦° μ½λ
if not flag:
print(-1)
else:
for i, val in enumerate(sorted(visited)):
if val == K+1:
print(i)
λ¬Έμ μμ μ€λ¦μ°¨μμΌλ‘ μΆλ ₯νλΌκΈΈλ μ΅κ΄μ μΌλ‘ sortedλ₯Ό μ μ©νκ³ μΈλ±μ€λ₯Ό μΆλ ₯νλ€.
...μκ°ν΄λ³΄λκΉ K=2, visited=[0, 2, 3, 2]λΌκ³ ν λ λ΅μ 2μΈλ° μ λ ¬μ νκ³ λλ©΄ [0, 2, 2, 3]μΌλ‘ κΈ°μ‘΄ μμκ° κΉ¨μ§κ² λμ΄ μλͺ»λ μΈλ±μ€λ₯Ό μΆλ ₯νκ² λλ κ² μ€λ΅μ μμΈμ΄μλ€.
3) ꡬν
import sys
from collections import deque
input = sys.stdin.readline
N, M, K, X = map(int, input().split())
country = {k: [] for k in range(1, N+1)}
for _ in range(M):
A, B = map(int, input().split())
country[A].append(B)
queue = deque([X])
visited = [0]*(N+1)
visited[X] = 1
while queue:
city = queue.popleft()
for node in country[city]:
if visited[node] == 0:
visited[node] = visited[city]+1
queue.append(node)
flag = False
for dist in visited:
if dist == K+1:
flag = True
break
if not flag:
print(-1)
else:
for i, val in enumerate(visited):
if val == K+1:
print(i)
4) μ΄λ €μ λ μ /λ°°μ΄ μ
π¨ μ΄λ €μ λ μ
- μμ
β λ°°μ΄ μ
- κ²½μ°μ λ°λΌμλ μ‘°κΈλ§ μ μ°νκ² μ¬κ³ νλ€λ©΄ sort λ©μλ, sorted ν¨μλ₯Ό μ°μ§ μκ³ λ μ λ ¬λ κ°μ μΆλ ₯ν μ μλ€ π
'Problem Solving > [νν΄99] TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
99ν΄λ½ μ½ν μ€ν°λ 12μΌμ°¨ TIL / BFS(λλΉ μ°μ νμ) (0) | 2024.11.08 |
---|---|
99ν΄λ½ μ½ν μ€ν°λ 11μΌμ°¨ TIL / DFS(κΉμ΄ μ°μ νμ) (6) | 2024.11.07 |
99ν΄λ½ μ½ν μ€ν°λ 9μΌμ°¨ TIL / BFS(λλΉ μ°μ νμ) (0) | 2024.11.06 |
99ν΄λ½ μ½ν μ€ν°λ 8μΌμ°¨ TIL / DFS(κΉμ΄ μ°μ νμ) (0) | 2024.11.04 |
99ν΄λ½ μ½ν μ€ν°λ 7μΌμ°¨ TIL / μμ νμ (0) | 2024.11.03 |