[SWEA] 창용 마을 무리의 개수 Posted on 2019-12-16 | In Problem_Solving | 문제 보러가기 제한사항 같은 관계는 반복해서 주어지지 않는다. 첫번째 생각 하나의 묶음을 계산해내는 문제. disjoint-set 즉, 유니온파인드 개념을 사용해서 풀이하면 된다. Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import java.util.Scanner; public class Solution { static int[] parent; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int tc=1;tc<=T;tc++) { int N = sc.nextInt(); int M = sc.nextInt(); parent = new int[N+1]; boolean[] ans = new boolean[N+1]; for(int i=1; i<N+1; i++) parent[i] = i; for(int i=0; i<M; i++) { int A = sc.nextInt(); int B = sc.nextInt(); if ( find(A) != find(B) ) { union(A,B); } } int cnt = 0; for(int i=1; i<N+1; i++) { int A = find(i); if ( !ans[A] ) { cnt++; } ans[A] = true; } System.out.println("#"+tc+" "+cnt); } } static int find(int n) { if ( n == parent[n] ) { return n; } else { return parent[n] = find(parent[n]); } } static void union(int n1,int n2) { int p1 = find(n1); int p2 = find(n2); if ( p1 != p2 ) { parent[p2] = p1; } } }