Ctrl K

Самая дешёвая дорожная сеть

Средняя
В области towns городов с номерами от 1 до towns. Есть список возможных дорог roads: запись [a, b, c] значит, что дорогу между городами a и b можно построить за c. Дороги двусторонние; между одной парой городов может быть несколько вариантов. Нужно выбрать дороги так, чтобы из любого города можно было доехать до любого другого (возможно, через другие города), а суммарная стоимость была минимальной. Верните эту стоимость или -1, если связать все города невозможно даже всеми дорогами сразу.
Пример 1
towns=4, roads=[[1, 2, 7], [2, 3, 2], [3, 4, 5], [1, 4, 3], [1, 3, 9]] → 10

Берём дороги 2–3 (2), 1–4 (3) и 3–4 (5): все города связаны, итого 10. Дешевле не выйдет.

Пример 2
towns=3, roads=[[1, 2, 4]] → -1

Город 3 не соединён ни с кем — ответ -1.

Пример 3
towns=2, roads=[[1, 2, 6], [2, 1, 1]] → 1

Между городами две дороги, достаточно более дешёвой.

Ограничения
  • 2 ≤ towns ≤ 10⁴
  • 1 ≤ len(roads) ≤ 10⁴
  • roads[i] = [a, b, c], 1 ≤ a, b ≤ towns, a ≠ b
  • 0 ≤ c ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВода для всей деревни СложнаяДешёвая проводка между точками СредняяОбязательные и запасные кабели СложнаяСкладываются ли связи в дерево СредняяСколько изолированных групп в сети Средняя
загружаем Python…
Вход
towns=4, roads=[[1, 2, 7], [2, 3, 2], [3, 4, 5], [1, 4, 3], [1, 3, 9]]
Ожидается
10

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 82 теста на сервере, включая скрытые.