반응형
https://www.acmicpc.net/problem/10451
주어진 순열로 그래프를 만들어서, 분리된 그래프의 개수를 구해주었습니다.
#include <iostream>
#include <vector>
using namespace std;
int t, n, a, v = 1, visit[1001] = { 0 };
vector<vector<int>> graph;
void dfs(int node) {
visit[node] = v;
for (int nxt : graph[node]) {
if (visit[nxt] != v)
dfs(nxt);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> t;
while (t--) {
cin >> n;
graph.clear();
graph.resize(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a;
graph[i].push_back(a);
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (visit[i] != v) {
dfs(i);
cnt++;
}
}
cout << cnt << "\n";
v++;
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 3184 : 양 (0) | 2021.11.20 |
---|---|
백준 1743 : 음식물 피하기 (0) | 2021.11.20 |
백준 1037 : 약수 (0) | 2021.11.19 |
백준 1934 : 최소공배수 (0) | 2021.11.19 |
백준 1254 : 팰린드롬 만들기 (0) | 2021.11.19 |