[백준] P9466

동민·2021년 3월 11일
0
import java.util.Scanner;

public class P9466 { // 시간초과
	private static int[] answer;
	private static int student;
	private static int count = 0;
//	private static boolean[] finished; // DFS로 모든 경우를 탐색하면 시간초과 발생 -> finished 배열을 통해 이미 계산된 노드는 건너 뛰도록 구현해야 함

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		answer = new int[n];

		for (int i = 0; i < n; i++) {
			student = sc.nextInt();
			int[] conn = new int[student + 1];
//			finished = new boolean[student + 1];
			
			for (int j = 1; j <= student; j++) {
				conn[j] = sc.nextInt();
			}
			for (int j = 1; j <= student; j++) {
				dfs(new boolean[student + 1], conn, j, j);
			}
			answer[i] = count;
			count = 0;
		}

		for (int result : answer) {
			System.out.println(result);
		}
		sc.close();
	}

	private static void dfs(boolean[] visit, int[] conn, int x, int origin) {
//		if(finished[conn[x]]) {
//			count ++;
//			return ;
//		}
		
		if (visit[x]) {
			if (x != origin) {
//				finished[origin] = true;
				count++;
			}
			return;
		}
		visit[x] = true;
		dfs(visit, conn, conn[x], origin);
	}
}
profile
BE Developer

0개의 댓글