백준_9466_텀프로젝트

파송송계란빡 ㅣ 2022. 7. 17. 20:01

import sys
sys.stdin = open("20220717_백준_9466_텀프로젝트.txt", "r")

sys.setrecursionlimit(10 ** 7)
tese_case = int(input())

def DFS(now) :
    global answer
    
    visited[now] = True           #방문처리
    cycle.append(now)             #방문한 학생 저장
    next = data[now]              #가리키는 거

    if visited[next] is True:     #방문을 했던 노드인데 또 탐색하러 오게 되면 사이클이다
        if next in cycle :        #next가 이미 cycle리스트에 들어가있으면 싸이클 생성
            answer += cycle[cycle.index(next):]     #사이클인 부분의 인덱스를 찾음
        return
    else:
        DFS(next)           #다음번 확인할 학생 번호 넘김

for _ in range(tese_case) :
    n = int(input())

    #1부터 시작하기 위해서 앞에 0 추가
    data = [0] + list(map(int, input().split()))
    visited = [False] * (n + 1)     #방문 확인용
    answer = []

    #방문하지 않은 곳부터 시작
    for i in range(1, n+1) :
        if visited[i] is False :
            cycle = []
            DFS(i)

    print(n-len(answer))        

#20220717_백준_9466_텀프로젝트.py
#https://www.acmicpc.net/problem/9466

 

백준_9466_텀프로젝트