Study/Algorithm

[백준 11725] 트리의 부모 찾기

pink_salt 2024. 8. 30. 02:35
728x90

문제

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


접근

  • 인접 리스트로 트리 생성
  • DFS 로 루트 노드 1부터 탐색
    • 탐색 시 해당 노드의 부모를 parents 배열에 기록한다.
    • 노드 탐색 시 다시 부모 노드를 탐색하지 않기 위해 주의!


코드

import java.util.*;
import java.io.*;

public class TreeParent_11725 {
    static List<Integer>[] tree;
    static int[] parents;
    static int N;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        tree = new List[N + 1];
        parents = new int[N + 1];

        for (int i = 1; i < N + 1; i++) {
            tree[i] = new ArrayList<>();
        }
        for (int i = 1; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int node1 = Integer.parseInt(st.nextToken());
            int node2 = Integer.parseInt(st.nextToken());
            tree[node1].add(node2);
            tree[node2].add(node1);
        }

        dfs(1, 0);

        StringBuffer sb = new StringBuffer();
        for (int i = 2; i < N + 1; i++) {
            sb.append(parents[i] + "\n");
        }
        System.out.print(sb.toString());

    }
    // 각 노드를 탐색하면서 자식 노드의 부모를 기록
    static void dfs(int node, int parent) {
        parents[node] = parent;
        for (int child : tree[node]) {
            if (child != parent) {
                dfs(child, node);
            }
        }
    }
}
728x90
반응형