Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

차근차근

[백준 1717] 집합의 표현 본문

대학교/Algorithm

[백준 1717] 집합의 표현

SWKo 2020. 2. 26. 17:10

0. 제목

  • 백준 1717 집합의 표현
  • BOJ 1717 집합의 표현
  • C++ 1717 집합의 표현

1. 문제

https://www.acmicpc.net/problem/1717


2. 풀이

  • Union-Find방식을 사용하는 문제이다.
  • Find를 통해 root를 찾아주고 Union을 통해 합쳐준다. union은 merge로 구현하였다.
  • 0과 1이 입력되는 케이스를 구분하여 적절히 find, union을 수행해주면 된다.

3. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
using namespace std;
 
int parent[1000001];
 
int find(int x){
    if(parent[x] == x) return x;
    return parent[x] = find(parent[x]);
}
 
void merge(int u, int v){
    u = find(u);
    v = find(v);
    if(u != v)
        parent[u] = v;
}
 
int main(int argc, const char * argv[]) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    int n, m;
    cin >> n >> m;
    
    for(int i = 0; i <= n; i++)
        parent[i] = i;
    
    for(int i = 0; i < m; i++){
        int num, a, b;
        cin >> num >> a >> b;
        
        if(num == 0){
            merge(a, b);
        }
        else if(num == 1){
            if(find(a) == find(b))
                cout << "YES" << '\n';
            else
                cout << "NO" << '\n';
        }
    }
    
    return 0;
}
 
 

 

'대학교 > Algorithm' 카테고리의 다른 글

[백준 2252] 줄 세우기  (0) 2020.02.27
[백준 9935] 문자열 폭발  (0) 2020.02.26
[백준 1325] 효율적인 해킹  (0) 2020.02.26
[백준 2606] 바이러스  (0) 2020.02.26
[백준 1764] 듣보잡  (0) 2020.02.24
Comments