텀 프로젝트

BiBi·2021년 2월 7일
0

코딩테스트연습

목록 보기
62/66
#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
#include <cmath>

int arr[100001];
int visited[100001];
bool Done[100001];

int t, n, cnt=0;


void bfs(int v) {
	if (Done[v] == true || visited[v] == -1) {
		return;
	}
	if (visited[v]==0) {
		visited[v] = 1;
	}
	else if (visited[v] == 1) {
		Done[v] = true;
		cnt++;
	}
	bfs(arr[v]);
	visited[v] = -1;

}



int main() {
	scanf("%d", &t);
	for (int i = 0;i < t;i++) {
		scanf("%d", &n);
		for (int j = 1;j <= n;j++) {
			visited[j] = 0;
			Done[j] = 0;
			arr[j] = 0;
		}
		for (int j = 1;j <= n;j++) {
			scanf("%d", &arr[j]);
		}
		for (int j = 1;j <= n;j++) {
			if (visited[j]==0) {
				bfs(j);
			}
		}
		printf("%d\n", n-cnt);
		cnt = 0;
	}
	
}
profile
Server Network Engineer

0개의 댓글