๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 0์ฃผ์ฐจ] 11725๋ฒˆ ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ์ฐพ๊ธฐ ์‹ค๋ฒ„2 - ์ž๋ฐ”(JAVA)/ DFS

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/11725

 

11725๋ฒˆ: ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N-1๊ฐœ์˜ ์ค„์— ํŠธ๋ฆฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋œ ๋‘ ์ •์ ์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N-1๊ฐœ์˜ ์ค„์— ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ 2๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ผ๋Š” ๊ฒƒ์ด Union-Find์—์„œ ์ฐพ๋Š” ๋ถ€๋ชจ๊ฐ€ ์•„๋‹ˆ๊ณ , ๋ฐ”๋กœ ์œ„์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋…ธ๋“œ๋ผ๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

 1๋ฒˆ ๋…ธ๋“œ๊ฐ€ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ผ๊ณ  ํ•˜์˜€์œผ๋ฏ€๋กœ, 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ๋กœ ๊ฐ–๋Š” ๋…ธ๋“œ๋“ค์€ ๋ฐ”๋กœ ์•„๋ž˜ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ๋“ค์ด๋‹ค.

 

 DFS๋กœ 1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•ด์„œ ์•„๋ž˜๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ๋“ค์„ ์ญ‰ ํƒ์ƒ‰ํ•˜๋ฉด ๋œ๋‹ค!

 ํŠน์ • ๋…ธ๋“œ์— ๋Œ€ํ•œ DFS ํƒ์ƒ‰์—์„œ ์•„๋ž˜๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ  ์•„์ง ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ž์‹๋…ธ๋“œ๋กœ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ž์‹๋…ธ๋“œ์— ๋Œ€ํ•œ ์ž์‹์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์žฌ๊ท€๋กœ DFS๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•œ๋‹ค.

 

โ—ป๏ธ int[] parents[N+1]: 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด

โ—ป๏ธ ArrayList<int>[N+1] list: ๊ฐ ๋…ธ๋“œ๋ณ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋…ธ๋“œ๋“ค์„ ์ €์žฅํ•  ArrayList์˜ ๋ฐฐ์—ด

โ—ป๏ธ visited[N+1]: ํŠน์ • ๋ฒˆํ˜ธ์˜ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•  ๋ฐฐ์—ด 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

import java.awt.List;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

//DFS
public class Main_๋ฐฑ์ค€_11725_ํŠธ๋ฆฌ์˜๋ถ€๋ชจ์ฐพ๊ธฐ_์‹ค๋ฒ„2 {

	static int N;
	static int[] parents;
	static boolean[] visited;
	static ArrayList<Integer>[] list;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		N = Integer.parseInt(br.readLine());
		parents = new int[N+1];
		visited = new boolean[N+1];
		list = new ArrayList[N+1];
		for (int i = 1; i <= N; i++) {
			list[i] = new ArrayList<Integer>();
		}
		
		for (int i = 0; i < N-1; i++) {
			st = new StringTokenizer(br.readLine());
			int v1 = Integer.parseInt(st.nextToken());
			int v2 = Integer.parseInt(st.nextToken());
			
			list[v1].add(v2);
			list[v2].add(v1);
		}//input
		
		dfs(1);
		
		//print
		for (int i = 2; i <= N; i++) {
			System.out.println(parents[i]);
		}
	}//end of main
	
	private static void dfs(int v) {
		visited[v]=true;
		
		for(int vertex: list[v]) {
			if(!visited[vertex]) {
				parents[vertex]=v;
				dfs(vertex);
			}
		}
	}//end of dfs
}//end of class

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ