문제
https://www.acmicpc.net/problem/11724
무방향 그래프에서 연결 요소를 찾는 문제
틀렸던 부분
N개의 노드가 있고, 1개의 간선이 있다고 하자. 그러면 연결 요소는 1개가 아니라 N-2개여야 한다. 즉, 연결되어있지 않은 노드들을 고려하지 않아서 2트한 문제이다.
코드
#include <bits/stdc++.h>
using namespace std;
bool vis[1002];
unordered_set<int> sub;
vector<int> adj[1002];
void DFS(int start) {
vis[start] = 1;
sub.erase(start);
for (int i = 0; i < adj[start].size(); i++) {
int next = adj[start][i];
if (!vis[next]) {
DFS(next);
}
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m, count;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int s, e;
cin >> s >> e;
adj[s].push_back(e);
adj[e].push_back(s);
sub.insert(s);
sub.insert(e);
}
// 정점이 연결되어 있지 않는 부분도 고려해야 한다
count = n - sub.size();
while (!sub.empty()) {
DFS(*sub.begin());
count++;
}
cout << count;
}
방문했던 곳인지를 O(1)에 확인하기 위해서 Hash Set(unordered_set)을 사용해봤는데, 과연 이게 실행시간에 도움이 되는지는 잘 모르겠다 ㅎㅎ. 재귀가 아닌 Stack을 이용하여 문제를 풀면 아마 시간을 조금 더 단축할 수 있을 듯
'PS > BOJ' 카테고리의 다른 글
[PS/BOJ] 20166번. 문자열 지옥에 빠진 호석 - C++[cpp] (0) | 2024.10.10 |
---|---|
[BOJ/백준] 1086번. 박성원 - C++[cpp] (0) | 2024.09.07 |
[BOJ/백준] 11286번. 절댓값 힙 - C++[cpp] (0) | 2024.06.24 |
[BOJ/백준] 25501번. 재귀의 귀재 - C++[cpp] (0) | 2024.04.29 |
[BOJ/백준] 24511번. queuestack - Java[자바] (0) | 2024.03.31 |