티스토리 뷰

출처 : https://www.acmicpc.net/problem/9466



#include <iostream>

#include <algorithm>

#include <memory.h>

using namespace std;


int N, arr[100001], result;

bool check[100001], e[100001];



void dfs(int now)

{

check[now] = true;

if (check[arr[now]])

{

if (!e[arr[now]])

{

for (int i = arr[now]; i != now; i = arr[i]) result++;

result++;

}

}

else dfs(arr[now]);

e[now] = true;

}


int main()

{

int t = 1; int T;

cin >> T;

while (T--)

{

result = 0; memset(arr, 0, sizeof(arr));

memset(check, false, sizeof(check)); memset(e, false, sizeof(e));

cin >> N;

for (int i = 1; i <= N; i++) cin >> arr[i];

for (int i = 1; i <= N; i++)

{

if (!check[i]) dfs(i);

}


cout << N-result << endl;

}


return 0;

}


'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ 1937] 욕심쟁이 판다  (0) 2018.08.26
[BOJ 15683] 감시  (0) 2018.08.24
[BOJ 14890] 경사로  (0) 2018.08.02
[BOJ 14503] 로봇청소기  (0) 2018.08.02
[BOJ 14500] 테트로미노  (0) 2018.08.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함