문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class baekjoon11725_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
ArrayList<ArrayList<Integer>> info = new ArrayList<>();
int[] treeInfo = new int[n + 1];
boolean[] visit = new boolean[n + 1];
int rootNode = 1;
for (int i = 0; i < n + 1; i++) {
info.add(new ArrayList<>());
}
for (int i = 0; i < n - 1; i++) {
st = new StringTokenizer(br.readLine());
int node1 = Integer.parseInt(st.nextToken());
int node2 = Integer.parseInt(st.nextToken());
info.get(node1).add(node2);
info.get(node2).add(node1);
}
Queue<Integer> queue = new LinkedList<>();
queue.add(rootNode);
visit[rootNode] = true;
while (!queue.isEmpty()) {
int parentNode = queue.remove();
for (Integer childNode : info.get(parentNode)) {
if (!visit[childNode]) {
visit[childNode] = true;
queue.add(childNode);
treeInfo[childNode] = parentNode;
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 2; i < n + 1; i++) {
sb.append(treeInfo[i] + "\n");
}
System.out.println(sb);
}
}
'알고리즘 > 초급1' 카테고리의 다른 글
[JAVA] 1167번: 트림의 지름 ( 초급 2-57 ) - fail (0) | 2021.11.02 |
---|---|
[JAVA] 백준 2250번: 트리의 높이와 너비 ( 초급 2-55 ) - hard (0) | 2021.10.27 |
백준: 1991번: 트리 순회 ( 초급 2-54 ) (0) | 2021.10.27 |
[JAVA] 백준 1261번: 알고스팟 ( 초급 2-53 ) - hard (0) | 2021.10.25 |
[JAVA] 백준 13549번: 숨바꼭질 3 ( 초급 2-52 ) - hard (0) | 2021.10.25 |