개발/알고리즘

백준 11725번 트리의 부모 찾기

dev-yoon-jerry 2021. 6. 8. 21:05

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

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

노드의 개수가 100000개까지 이므로 인접리스트를 사용하는 것을 생각했고 루트부터 리프까지 탐색하기 위해 dfs를 사용했다.

인접리스트랑 dfs를 연습해볼 수 있었던 좋은문제!

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

public class bj11725 {
	static int N;
	static ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
	static boolean [] visit;
	static int [] parent;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		visit = new boolean[N+1];
		parent = new int[N+1];
		for(int n=0;n<=N;n++) {
			list.add(new ArrayList<Integer>());
		}
		for(int n=1;n<N;n++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			list.get(a).add(b);
			list.get(b).add(a);
		}
		makeTree(1);
		StringBuilder sb = new StringBuilder();
		for(int i=2;i<N+1;i++) {
			sb.append(parent[i]).append("\n");
		}
		System.out.println(sb);
	}
	static void makeTree(int index) {
		visit[index] = true;
		for(int v : list.get(index)) {
			if(visit[v]) continue;
			parent[v] = index;
			makeTree(v);
		}
	}
}

'개발 > 알고리즘' 카테고리의 다른 글

백준 1062번 가르침  (0) 2021.06.17
백준 9465번 스티커  (0) 2021.06.10
백준 1149번 RGB거리  (0) 2021.06.09
백준 2644번 촌수계산  (0) 2021.06.08
백준 21608번 상어초등학교  (0) 2021.06.07