DFS는 stack과 재귀 방식으로 풀 수 있는데 나는 처음에 배울 때 재귀로 배워서 어디서 return할 지 더 어렵지만 자꾸 재귀로 푼다.
백준 25195번: Yes or yes 문제가 넘 귀엽..ㅋㅋ
팬을 만나면 다른 길을 찾아가고 (continue) 모든 길을 가봤으면 return False 하면 된다.
대신 중간에 팬을 안 만나고 끝까지 (더이상 간선이 없는 곳까지) 갔으면 return True한다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
u, v = map(int, input().split())
graph[u].append(v)
_ = input() # 어차피 팬은 한 줄에 들어와서 파이썬은 s가 필요 없다
fan = set(map(int, input().split()))
visited = set([1])
def dfs(u):
if u in fan:
return False
if not graph[u]:
return True
for v in graph[u]:
if v not in visited:
visited.add(v)
if dfs(v):
return True
return False
if dfs(1):
print('yes')
else:
print('Yes')
그래서 이렇게 풀었는데.!!

백준의 파이썬 recursion 제한 때문에 이런 에러가..ㅎㅎ
파이썬 시간 제한 걸려서 input = sys.stdin.readline 쓰는 것도 억울한데 서럽다..
sys.setrecursionlimit(큰수)를 추가하면 해결된다. 난 10**6 썼다.
파이썬이 워낙 쉬워서 패널티라고 생각해야겠다.