Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[정올] 1863. 종교 본문

정올

[정올] 1863. 종교

코드와이 2021. 3. 19. 16:14

 

서로소 집합

문제링크

jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1136&sca=40

 

JUNGOL

 

www.jungol.co.kr

 

package 정올;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class 종교 {

	static int N;
	static int parents[];		
	
	static void make() {
		// 크기가 1인 단위집합을 만든다.
		for(int i = 1 ; i <= N ; i++) {
			parents[i] = i;
		}
	}
	
	static int findSet(int a) {
		if(parents[a] == a) {
			return a;
		}	
//		return findSet(parent[a]); 					// path compression 전
		return parents[a] = findSet(parents[a]);		// path compression 후
	}
	
	static boolean union(int a, int b) {
		
		int aRoot = findSet(a);
		int bRoot = findSet(b);
		
		if(aRoot == bRoot) return false;
		
		parents[bRoot] = aRoot;
		return true;
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		parents = new int[N+1];
		make();
		for(int i = 0 ; i < m ; i++) {
			st = new StringTokenizer(br.readLine());
			union(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
		}

		int sum = 0;
		for(int i = 1 ; i <= N ; i++) {
			if(parents[i] == i) {
				sum++;
			}
		}
		System.out.println(sum);
	}
}

'정올' 카테고리의 다른 글

[정올] 1037. 오류교정  (0) 2021.02.24
[정올] 1205. 조커  (0) 2021.02.24