[백준] 1717번 - 집합의 표현 (골드 5)

AI·2025년 10월 23일

https://www.acmicpc.net/problem/1717
union-find

import java.io.*;
import java.util.*;
public class Main {
    static int n,m;
    static int[] parent;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        // n,m
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        parent = new int [n+1];
        for(int i=1;i<=n;i++){
            parent[i] = i;
        }
        // m번 반복으로 입력 값 받음
        for(int i=0;i<m;i++){
            st = new StringTokenizer(br.readLine());
            int type = Integer.parseInt(st.nextToken());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            // 0 a b -> 합치기
            if(type == 0) union(a,b);
            // 1 a b -> 부모 동일한지 테스트 -> YES/NO
            else if(type==1){
                if(find(a)==find(b)) System.out.println("YES");
                else System.out.println("NO");
            }
        }
        
    }
    static void union(int a, int b){
        a = find(a);
        b = find(b);
        
        if(a==b) return;
        else{
            parent[b] = a;
        }
    }
    static int find(int x){
        return parent[x] == x ? x : find(parent[x]);
    }
}

union

static void union(int a, int b){
    a = find(a);
    b = find(b);
    
    if(a==b) return;

    if(deep[a]<deep[b]){
        int t = a;
        a=b;
        b=t;
    }
    parent[b] = a;
    if(deep[a]==deep[b]) deep[a]++;

    size[a] += size[b];
    componetNum --;
    
    return;
}

0개의 댓글