https://coderun.yandex.ru/problem/search-in-depth Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val (_, m) = reader.readLine().split(" ").map(String::toInt)

    val graph = mutableMapOf<Int, MutableList<Int>>()
    repeat(m) {
        val (u, v) = reader.readLine().split(" ").map(String::toInt)
        graph.computeIfAbsent(u) { mutableListOf() }.add(v)
        graph.computeIfAbsent(v) { mutableListOf() }.add(u)
    }

    val visited = mutableSetOf<Int>()

    fun dfs(vertex: Int) {
        visited.add(vertex)
        for (neighbor in graph[vertex] ?: emptyList()) {
            if (neighbor !in visited) {
                dfs(neighbor)
            }
        }
    }

    // Запуск DFS из вершины 1
    dfs(1)

    // Сортировка результата
    val result = visited.sorted()

    // Вывод количества вершин в компоненте и их самих
    writer.write("${result.size}\\n")
    writer.write(result.joinToString(" "))
    writer.newLine()

    reader.close()
    writer.close()
}