[백준/코틀린] 11725번: 트리의 부모 찾기
실버 2
링크
풀이
트리는 사이클이 없는 연결 그래프이므로, 루트 노드에서 탐색을 시작하면
각 노드에 처음 도달한 경로가 곧 그 노드의 부모 노드가 됩니다.
DFS 또는 BFS를 사용해 루트부터 트리를 탐색하며,
각 노드를 처음 방문할 때 그 노드의 부모를 기록합니다.
(트리는 사이클이 없으므로, 모든 노드는 한 번만 방문됩니다.)
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
lateinit var tree: List<MutableList<Int>>
lateinit var parent: IntArray
fun dfs(start: Int) {
val stack = ArrayDeque<Int>()
parent[start] = start
stack.addLast(start)
while (stack.isNotEmpty()) {
val current = stack.removeLast()
tree[current].forEach {
if (parent[it] == 0) {
parent[it] = current
stack.addLast(it)
}
}
}
}
fun main() {
val n = readln().toInt()
tree = List(n + 1) { mutableListOf() }
parent = IntArray(n + 1)
repeat(n - 1) {
val (u, v) = readln().split(" ").map { it.toInt() }
tree[u] += v
tree[v] += u
}
dfs(1)
parent.drop(2).forEach { println(it) }
}
This post is licensed under CC BY 4.0 by the author.