STUDY/Algorithm
[백준] 9466 텀 프로젝트 python
sinawi95
2021. 5. 18. 21:24
728x90
import sys; input = sys.stdin.readline
sys.setrecursionlimit(10**7)
def dfs(node):
global result
visit[node] = 1
cycle.append(node)
stu = st[node]
if visit[stu]:
if stu in cycle:
result += cycle[cycle.index(stu):]
return
dfs(stu)
for tc in range(int(input())):
n = int(input())
st = [-1] + list(map(int, input().split()))
visit = [False] * (n + 1)
result = []
for i in range(1, n+1):
if not visit[i]:
cycle = []
dfs(i)
print(n - len(result))
재귀 DFS로 푸는 문제이다
가장 약한 재귀 DFS...
쉬운 그래프 탐색 문제로 재귀 좀 공부 해야겠다.