T=int(input())defbfs(V):queue=[V]visited[V]=1#방문한 곳 1로 표시
whilequeue:V=queue[0]queue.pop(0)next=arr[V]ifvisited[next]==0:#아직 방문하지 않은 곳인 경우
visited[next]=1queue.append(next)return1foriinrange(T):answer=0N=int(input())arr=[0]+list(map(int,input().split()))visited=[0]*(N+1)foriinrange(1,N+1):ifvisited[i]==0:answer+=bfs(i)print(answer)#순열 사이클의 개수
처음에 BFS를 이용하여 문제를 풀었지만, 이 문제는 DFS를 이용하여 푸는 것이 좀더 적합하다고 생각하여 DFS를 이용하여 다시 풀어보았다.
importsyssys.setrecursionlimit(10**7)T=int(input())defdfs(V):visited[V]=1#방문한 곳 1로 표시
next=arr[V]ifvisited[next]==0:#아직 방문하지 않은 곳인 경우
dfs(next)foriinrange(T):answer=0N=int(input())arr=[0]+list(map(int,input().split()))visited=[0]*(N+1)foriinrange(1,N+1):ifvisited[i]==0:dfs(i)answer+=1print(answer)#순열 사이클의 개수