풀이
1번을 기준으로 DFS나 BFS를 돌려주기만 하면 되는 문제입니다.
#include<iostream>
#include<vector>
using namespace std;
const int MAX = 101;
vector<int> v[MAX];
bool visited[MAX];
int res = -1;
void DFS(int node)
{
res++;
visited[node] = true;
size_t sz = v[node].size();
for (size_t i = 0; i < sz; i++) {
int next = v[node][i];
if (!visited[next]) DFS(next);
}
return;
}
int main(void)
{
int n, m; cin >> n >> m;
while (m--) {
int i, j; cin >> i >> j;
v[i].push_back(j);
v[j].push_back(i);
}
DFS(1);
cout << res;
return 0;
}
반례
Input
2
1
1 2
Output
1
Input
8
7
1 2
2 3
3 4
4 1
5 6
6 7
7 8
Output
3
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 7569번: 토마토 (0) | 2021.05.05 |
---|---|
[백준/C,C++] 1012번: 유기농 배추 (0) | 2021.05.05 |
[백준/C,C++] 18870번: 좌표 압축 (0) | 2021.04.21 |
[백준/C,C++] 1655번: 가운데를 말해요 (0) | 2021.04.21 |
[백준/C,C++] 11286번: 절댓값 힙 (0) | 2021.04.21 |
댓글