๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [BFS/DFS] 18352๋ฒˆ_ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

Dbswnstjd 2022. 11. 16. 07:46

๋ฌธ์ œ

https://www.acmicpc.net/problem/18352

 

18352๋ฒˆ: ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ N, ๋„๋กœ์˜ ๊ฐœ์ˆ˜ M, ๊ฑฐ๋ฆฌ ์ •๋ณด K, ์ถœ๋ฐœ ๋„์‹œ์˜ ๋ฒˆํ˜ธ X๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ๋‘ ๊ฐœ

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 18352๋ฒˆ ๋ฌธ์ œ - ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ
from collections import deque
import sys
input = sys.stdin.readline
n, m, k, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
visited = [False for _ in range(n+1)]
dist = [0 for _ in range(n+1)]
answer = []
def dfs(x):
    queue = deque([x])
    visited[x] = True
    while queue:
        now = queue.popleft()
        
        for i in graph[now]:
            if visited[i] == False:
                dist[i] = dist[now] + 1
                visited[i] = True
                queue.append(i)
                if dist[i] == k:
                    answer.append(i)
dfs(x)
if answer:
    answer.sort()
    for i in answer:
        print(i)
else:
    print(-1)

์ฒ˜์Œ์— DFS๋กœ ํ’€๋‹ค๊ฐ€ ์ž๊พธ ํ—ค๋ฉ”๊ณ  ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™€์„œ BFS๋กœ ํ’€์—ˆ๋‹ค.