본문 바로가기
백준

백준 9372: 상근이의 여행(java)

by unhyepnhj 2024. 8. 19.

문제


풀이

 

신창 트리를 이용하면 간단히 풀이할 수 있다.

 

신장 트리(spanning tree)란 그래프 내의 모든 정점을 포함하는 트리로, 모든 정점들이 연결되어 있어야 하고 사이클을 포함하지 않는다. 그래프에 n개의 정점이 있을 때, 이들을 (n-1)개의 간선으로 연결하는 것이다.

 

신장 트리는 그래프의 최소 연결 부분 그래프가 되는데, 이때 '최소'는 간선의 수가 가장 적음을 의미한다. n개의 정점을 가지는 그래프는 최소한 (n-1)개의 간선을 가져야 하며, (n-1)개의 간선으로 연결되어 있으면 필연적으로 트리 형태가 되고 이것이 바로 신장 트리이다. 

 

상근이는 국가를 방문하고자 하므로, 각 국가를 정점으로 생각한다면 M이나 a, b 쌍을 고려할 필요 없이 (N-1)을 출력함으로써 풀 수 있는 문제이다.

 

전체 코드

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

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int T=Integer.parseInt(br.readLine());
		for(int i=0; i<T; i++) {
			st=new StringTokenizer(br.readLine());
			int N=Integer.parseInt(st.nextToken());
			int M=Integer.parseInt(st.nextToken());
			
			for(int j=0; j<M; j++) {
				br.readLine();
			}//a, b는 입력만
			
			System.out.println(N-1);
		}
	}
}

'백준' 카테고리의 다른 글

백준 11047: 동전 0(java)  (0) 2024.08.20
백준 14244: 트리 만들기(java)  (0) 2024.08.20
백준 1463: 1로 만들기(java)  (0) 2024.08.09
백준 1874: 스택 수열(java)  (0) 2024.08.07
백준 5397: 키로거(java)  (0) 2024.08.07