
과정
- 1차원 DFS를 사용했습니다.
- 리스트로 입력 받아서, 인덱스에 맞게 그래프로 옮기는 작업을 했습니다. 이 때 인풋은 1부터 시작하지만, 인덱스는 0부터 시작한다는 점에 주의해서 입력 받습니다.
import sys
input = sys.stdin.readline
tc = int(input())
for _ in range(tc):
N = int(input())
graph = [[] for _ in range(N+1)]
lst = list(map(int, input().split()))
for i in range(N):
graph[i+1].append(lst[i])
graph[lst[i]].append(i+1)
visited = [False] * (N+1)
def dfs(x, graph, visited):
visited[x] = True
for i in graph[x]:
if not visited[i]:
dfs(i, graph, visited)
ans = 0
for i in range(1, N+1):
if not visited[i]:
dfs(i, graph, visited)
ans += 1
print(ans)