[백준] 1717 | 집합의 표현 | C++
Algorithm/문제풀이
2022. 7. 19. 20:15
풀이의 핵심은 Union & Find 알고리즘이다.
위 그림을 보면,
노드 1, 2, 3이 한 집합,
노드 4, 5가 한 집합으로 엮여있음을 직관적으로 알 수 있다.
(추후, 작성하겠습니다.)
#include<bits/stdc++.h>
using namespace std;
int n, m;
int unf[1000004];
int Find(int v) {
if(unf[v]==v) return v;
return unf[v]=Find(unf[v]);
}
void Union(int a, int b) {
a=Find(a);
b=Find(b);
if(a!=b) unf[a]=b;
}
int main() {
ios_base::sync_with_stdio(0);
for(int i=1; i<=1000004; i++) unf[i]=i;
cin>>n>>m;
int a, b, c;
while(m--) {
cin>>a>>b>>c;
if(a==0) Union(b, c);
if(a==1) {
int fb=Find(b);
int fc=Find(c);
if(fb==fc) puts("YES");
if(fb!=fc) puts("NO");
}
}
return 0;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[백준] 14501 | 퇴사 | C++ (0) | 2022.07.21 |
---|---|
[백준] 17478 | 재귀함수가 뭔가요? | C++ (0) | 2022.07.20 |
[백준] 4948 | 베르트랑 공준 | C++ (0) | 2022.07.19 |
[백준] 2583 | 영역 구하기 | C++ (0) | 2022.07.15 |
[백준] 10799 | 쇠막대기 | C++ (0) | 2022.07.15 |