반응형
https://www.acmicpc.net/problem/1717
#include <stdio.h>
#include <iostream>
using namespace std;
int unf[1000002];
int Find(int v){
if(v==unf[v]) return v;
else{
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::sync_with_stdio(false);
cin.tie(0);
int i,n, m,a,b,c;
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++){
unf[i] = i;
}
for(i=0; i<m; i++){
scanf("%d %d %d", &a,&b,&c);
if(a==1){
int v1 = Find(b);
int v2 = Find(c);
if(v1==v2) printf("YES\n");
else printf("NO\n");
}
else{
int v1 = Find(b);
int v2 = Find(c);
if(v1!=v2){
Union(b,c);
}
}
}
}
집합을 나타내는 방법을
union & find 알고리즘을 이용하여 풀 수 있다.
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 15650번: N과 M (2) - 순열의 조합 문제 DFS로 풀기 (0) | 2022.01.22 |
---|---|
백준 7490번 : 0 만들기 - DFS (0) | 2022.01.21 |
백준 15811번 : 복면산?! - 복면산 DFS 문제 (0) | 2022.01.21 |
백준 1238번 : 파티 - 다익스트라 알고리즘 활용 문제 (0) | 2022.01.20 |
백준 4195번 : 친구 네트워크 - Union & Find (0) | 2022.01.18 |