https://www.acmicpc.net/problem/10451
간선으로 연결된 정점들의 집합이 몇 개 있는지 구하는 문제이다. DFS나 BFS로 풀 수 있다. 흔히 영역을 구하는 문제와 비슷한 것 같다. 오늘은 간단하게 코드만 올리겠다.
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 32 33 34 35 36 37 38 39 40 | #include<iostream> #include<vector> #include<cstring> using namespace std; int area[1001]; void dfs(int p, int flag, vector<int> g[1001]){ if(area[p]) return; area[p] = flag; for(int i = 0; i < g[p].size();i++){ dfs(g[p][i], flag, g); } } int main(void){ ios::sync_with_stdio(false); cin.tie(NULL); int t; cin >> t; while(t--){ int n, v, flag; vector<int> g[1001]; cin >> n; memset(area, 0, sizeof(area)); for(int i = 1; i <= n; i++){ cin >> v; g[i].push_back(v); } flag = 1; for(int i = 1; i <= n; i++){ if(area[i]) continue; dfs(i, flag, g); flag++; } cout << flag - 1 << "\n"; } } | cs |
728x90
'개발 > 알고리즘' 카테고리의 다른 글
1645_랜선 자르기 (0) | 2020.12.08 |
---|---|
1167_트리의 지름 (0) | 2020.12.07 |
1707_이분그래프 (0) | 2020.11.30 |
1107_리모컨 (0) | 2020.11.29 |
11724_연결요소의 개수 (0) | 2020.11.27 |