문제 출처
https://www.acmicpc.net/problem/2606
실버3 유니온 파인드 또는 dfs 문제이다.
dfs로 푸는 풀이는 경우가 많지만,
이 문제와 같은 경우는 1번 컴퓨터와 연결되어있는지 안되어있는지만 확인하면 되는 문제이므로
유니온 파인드를 이용한 풀이도 가능하다.
유니온 파인드에 관한 해설은 아래 링크를 참고하면 된다.
[알고리즘] 유니온 파인드 (Union-Find)
유니온 파인드유니온 파인드 (Union-Find)란, 합 집합을 만드는 것이다.즉, A, B, C데이터가 존재할 때, A와 B데이터가 하나의 집단이고, C데이터는 또 다른 집단이다를 나타내기 위해 쓰는 알고리즘이
codingul1234.tistory.com
#풀이
#include<iostream>
#define MAX 100
using namespace std;
int parent[MAX + 1] = { 0, };
int Find(int n) {
if (parent[n] == n) return n;
else return parent[n] = Find(parent[n]);
}
void Union(int x, int y) {
x = Find(x);
y = Find(y);
if (x != y) {
if (x < y) {
parent[y] = x;
}
else {
parent[x] = y;
}
}
}
int main()
{
int N, M, ans = 0;
cin >> N >> M;
for (int i = 1; i <= N; i++) {
parent[i] = i;
}
for (int i = 0,a,b; i < M; i++) {
cin >> a >> b;
Union(a, b);
}
for (int i = 2; i <= N; i++) {
if (Find(i) == 1) ans++;
}
cout << ans;
return 0;
}
'백준' 카테고리의 다른 글
[백준] 2457: 공주님의 정원 - C/C++ (0) | 2024.05.08 |
---|---|
[백준] 1991: 트리 순회 - C/C++ (0) | 2024.04.29 |
[백준] 16236: 아기 상어 - C/C++ (0) | 2024.04.27 |
[백준] 2012: 등수 매기기 - C/C++ (0) | 2024.03.27 |
[백준] 2164: 카드2 - C/C++ (0) | 2024.03.27 |