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...
쉬운 그래프 탐색 문제로 재귀 좀 공부 해야겠다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1541 잃어버린 괄호 python (0) | 2021.05.26 |
---|---|
[백준] 2668 숫자고르기 python (0) | 2021.05.20 |
[백준] 1992 쿼드트리 python (0) | 2021.05.18 |
[백준] 2750 수 정렬하기 C (2) | 2021.05.18 |
[백준] 14500 테트로미노 python (0) | 2021.05.18 |