Jin's Library

[Gold Ⅳ] 1043 - 거짓말 본문

Algorithm - Java/BOJ - Gold

[Gold Ⅳ] 1043 - 거짓말

Linkin 2025. 10. 2. 08:44
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_1043 {
    static int[] parent;
    
    static int find(int x){
        if(parent[x] == x) return x;
        return parent[x] = find(parent[x]);
    }

    static void union(int a, int b){
        a = find(a);
        b = find(b);
        if(a != b) parent[b] = a;
    }

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());  // 사람의 수
        int M = Integer.parseInt(st.nextToken());  // 파티의 수
        int P = 0, cnt = 0; // 진실을 아는 대표자
        parent = new int[N+1];
        for(int i = 1; i<=N; i++) parent[i] = i;

        st = new StringTokenizer(br.readLine());
        int X = Integer.parseInt(st.nextToken());  // 진실을 아는 사람의 수
        if(X > 0){
            P = Integer.parseInt(st.nextToken());
            for(int i = 1; i < X; i++)
                union(P, Integer.parseInt(st.nextToken()));    
        }

        int[][] parties = new int[M][];
        for(int i = 0; i < M; i++){
            st = new StringTokenizer(br.readLine());
            int Y = Integer.parseInt(st.nextToken()); // 해당 파티 참석 인원 수
            parties[i] = new int[Y];
            for(int j = 0; j < Y; j++)
                parties[i][j] = Integer.parseInt(st.nextToken());

            for(int j = 1; j < Y; j++)
                union(parties[i][0], parties[i][j]);  
        }

        if(X == 0){
            System.out.println(M); 
            return;
        } 

        for(int i = 0; i < M; i++){
            if(find(P) != find(parties[i][0]))
                cnt++;
        }
        System.out.println(cnt);
    }    
}

'Algorithm - Java > BOJ - Gold' 카테고리의 다른 글

[Gold Ⅳ] 2293 - 동전 1  (0) 2025.10.20
[Gold Ⅴ] 1931 - 회의실 배정  (0) 2025.10.17
[Gold Ⅱ] 10775 - 공항  (0) 2025.10.01
[Gold Ⅴ] 1717 - 집합의 표현  (0) 2025.10.01
[Gold Ⅳ] 1976 - 여행 가자  (0) 2025.10.01