반응형

https://www.acmicpc.net/problem/10451

 

10451번: 순열 사이클

1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\  3

www.acmicpc.net

 

주어진 순열로 그래프를 만들어서, 분리된 그래프의 개수를 구해주었습니다.

 

#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

+ Recent posts