π©π»πΎ
[λ°±μ€/Python] 18352λ² νΉμ 거리μ λμ μ°ΎκΈ° λ³Έλ¬Έ
[λ°±μ€/Python] 18352λ² νΉμ 거리μ λμ μ°ΎκΈ°
μ₯¬μ€μ΄ 2023. 3. 21. 15:001οΈβ£λ¬Έμ μ€λͺ
μ΄λ€ λλΌμλ 1λ²λΆν° Nλ²κΉμ§μ λμμ Mκ°μ λ¨λ°©ν₯ λλ‘κ° μ‘΄μ¬νλ€. λͺ¨λ λλ‘μ 거리λ 1μ΄λ€.
μ΄ λ νΉμ ν λμ Xλ‘λΆν° μΆλ°νμ¬ λλ¬ν μ μλ λͺ¨λ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° μ νν KμΈ λͺ¨λ λμλ€μ λ²νΈλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€. λν μΆλ° λμ Xμμ μΆλ° λμ Xλ‘ κ°λ μ΅λ¨ 거리λ νμ 0μ΄λΌκ³ κ°μ νλ€.
μλ₯Ό λ€μ΄ N=4, K=2, X=1μΌ λ λ€μκ³Ό κ°μ΄ κ·Έλνκ° κ΅¬μ±λμ΄ μλ€κ³ κ°μ νμ.
μ΄ λ 1λ² λμμμ μΆλ°νμ¬ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° 2μΈ λμλ 4λ² λμ λΏμ΄λ€. 2λ²κ³Ό 3λ² λμμ κ²½μ°, μ΅λ¨ κ±°λ¦¬κ° 1μ΄κΈ° λλ¬Έμ μΆλ ₯νμ§ μλλ€.
2οΈβ£μ λ ₯
첫째 μ€μ λμμ κ°μ N, λλ‘μ κ°μ M, 거리 μ 보 K, μΆλ° λμμ λ²νΈ Xκ° μ£Όμ΄μ§λ€. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) λμ§Έ μ€λΆν° Mκ°μ μ€μ κ±Έμ³μ λ κ°μ μμ°μ A, Bκ° κ³΅λ°±μ κΈ°μ€μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. μ΄λ Aλ² λμμμ Bλ² λμλ‘ μ΄λνλ λ¨λ°©ν₯ λλ‘κ° μ‘΄μ¬νλ€λ μλ―Έλ€. (1 ≤ A, B ≤ N) λ¨, Aμ Bλ μλ‘ λ€λ₯Έ μμ°μμ΄λ€.
3οΈβ£μΆλ ₯
Xλ‘λΆν° μΆλ°νμ¬ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° KμΈ λͺ¨λ λμμ λ²νΈλ₯Ό ν μ€μ νλμ© μ€λ¦μ°¨μμΌλ‘ μΆλ ₯νλ€.
μ΄ λ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° KμΈ λμκ° νλλ μ‘΄μ¬νμ§ μμΌλ©΄ -1μ μΆλ ₯νλ€.
π©π»π»μμ±ν μ½λ
import sys
from collections import deque
input = sys.stdin.readline
n, m, k, x = map(int, input().split()) # λμ κ°μ, λλ‘ κ°μ, 거리 μ 보, μΆλ°λμ λ²νΈ
A = [[]for _ in range(n+1)] # μ°κ²°λ λμ μ 보 μ μ₯
visited = [-1] * (n + 1) # 거리 μ 보 μ μ₯
answer = []
for i in range(m):
a, b = map(int, input().split())
A[a].append(b)
def BFS(v):
queue = deque()
queue.append(v)
visited[v] += 1
while queue:
current = queue.popleft()
for i in A[current]:
if visited[i] == -1:
visited[i] = visited[current] + 1 # 거리 κ³μ°
queue.append(i)
BFS(x)
for i in range(n+1):
if visited[i] == k:
answer.append(i)
if not answer:
print(-1)
else:
answer.sort()
for i in answer:
print(i)
π‘μ½λ μ€λͺ
μ΄μ κΉμ§ νμλ BFS λ¬Έμ μ λ€λ₯΄κ² μ΄λ² λ¬Έμ λ 리μ€νΈ visitedμ λ°©λ¬ΈκΈ°λ‘μ΄ μλ 거리 μ 보λ₯Ό μ μ₯νλ€.
for i in range(m):
a, b = map(int, input().split())
A[a].append(b)
β¬οΈμ°κ²°λ λμ μ 보λ₯Ό μ λ ₯ λ°μ 리μ€νΈ Aμ μ μ₯νλ€.
def BFS(v):
queue = deque()
queue.append(v)
visited[v] += 1
while queue:
current = queue.popleft()
for i in A[current]:
if visited[i] == -1:
visited[i] = visited[current] + 1 # 거리 κ³μ°
queue.append(i)
β¬οΈλ§€κ°λ³μλ‘ λ€μ΄μ¨ λμμ μ°κ²°λ λμκ° νμλ μ μ΄ μλμ§ νμΈνμ¬ νμ μ μ΄λΌλ©΄ ν΄λΉ λμμ 거리λ₯Ό visited[current] + 1λ‘ μ μ₯ν΄μ€λ€. -> visited[v]μ κ°μ΄ -1μΈ λμλ μμ§ λ°©λ¬Έ X
'μ½λ©ν μ€νΈ > λ°±μ€(BOJ)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ€μ΅μ€νΈλΌ λ¬Έμ μ 리 (0) | 2024.01.21 |
---|---|
[λ°±μ€/Python] 18870λ² μ’ν μμΆ (0) | 2023.04.02 |
[λ°±μ€/Python] 1033λ² μΉ΅ν μΌ (0) | 2023.03.16 |
[λ°±μ€/Python] 1934λ² μ΅μ곡배μ (0) | 2023.03.15 |
[λ°±μ€/Python] 1456λ² κ±°μ μμ (0) | 2023.03.15 |