11725번: 트리의 부모 찾기백준/문제2024. 9. 11. 13:02
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/11725
언어 : Kotlin
문제 설명 :
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력 :
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
7 1 6 6 3 3 5 4 1 2 4 4 7 |
4 6 1 3 1 4 |
12 1 2 1 3 2 4 3 5 3 6 4 7 4 8 5 9 5 10 6 11 6 12 |
1 1 2 3 3 4 4 5 5 6 6 |
풀이 :
DFS, BFS로 풀 수 있는 문제.
그래프를 만들고 DFS, BFS를 통해 탐색하며 부모 노드를 기록하고, 각 노드가 방문될 때마다 해당 부모 노드를 기록한다.
import java.io.BufferedWriter
import java.io.OutputStreamWriter
import java.util.*
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val tree = Array(n + 1) { mutableListOf<Int>() }
val parent = IntArray(n + 1)
repeat(n - 1) {
val (a, b) = readLine().split(" ").map { it.toInt() }
tree[a].add(b)
tree[b].add(a)
}
bfs(tree, parent, n)
for (i in 2 .. n) {
bw.write("${parent[i]}\n")
}
bw.flush()
bw.close()
}
fun bfs(tree: Array<MutableList<Int>>, parent: IntArray, n: Int) {
val visited = BooleanArray(n + 1)
val queue = LinkedList<Int>()
queue.add(1)
visited[1] = true
while (queue.isNotEmpty()) {
val node = queue.poll()
for (i in tree[node]) {
if (!visited[i]) {
parent[i] = node
visited[i] = true
queue.add(i)
}
}
}
}
'백준 > 문제' 카테고리의 다른 글
11046번: 팰린드롬?? (0) | 2024.09.12 |
---|---|
23746번: 문자열 압축 해제 (0) | 2024.09.12 |
1753번: 최단경로 (0) | 2024.09.11 |
29701번: 모스 부호 (1) | 2024.09.10 |
29700번: 우당탕탕 영화예매 (3) | 2024.09.10 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!