Ctrl K

Перекрасить путь в один цвет

Сложная
Дано дерево из node_count вершин с номерами от 0 до node_count - 1. Каждое звено links[i] = [a, b, c] соединяет вершины a и b и покрашено в цвет c — число от 1 до 26. Каждый запрос queries[j] = [x, y] спрашивает: сколько звеньев минимум нужно перекрасить, чтобы все звенья на пути между x и y стали одного цвета? Перекрасить звено можно в любой цвет. Запросы независимы: перед каждым дерево возвращается к исходной раскраске. Если x = y, путь пуст и ответ 0. Верните список ответов в порядке запросов.
Пример 1
node_count=5, links=[[0, 1, 3], [1, 2, 3], [1, 3, 7], [3, 4, 3]], queries=[[0, 2], [2, 4], [4, 4]] → [0, 1, 0]

Путь 0–1–2 уже весь цвета 3. На пути 2–1–3–4 цвета 3, 7, 3 — перекрашиваем одно звено 1–3. Путь из вершины в саму себя пуст, ничего делать не нужно.

Пример 2
node_count=4, links=[[0, 1, 1], [0, 2, 2], [0, 3, 3]], queries=[[1, 2], [3, 3], [2, 3]] → [1, 0, 1]

На пути 1–0–2 два звена разных цветов — одно надо перекрасить.

Ограничения
  • 1 ≤ node_count ≤ 10⁴
  • len(links) = node_count - 1, звенья образуют дерево
  • links[i] = [a, b, c], 0 ≤ a, b < node_count, 1 ≤ c ≤ 26
  • 1 ≤ len(queries) ≤ 2·10⁴
  • queries[j] = [x, y], 0 ≤ x, y < node_count
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПуть в дереве без одинаковых соседей СложнаяМаршруты между равными вершинами СложнаяСбор монет с возвратом СложнаяПоездки со скидкой по дереву СложнаяОткрытые комнаты от холла Средняя
загружаем Python…
Вход
node_count=5, links=[[0, 1, 3], [1, 2, 3], [1, 3, 7], [3, 4, 3]], queries=[[0, 2], [2, 4], [4, 4]]
Ожидается
[0, 1, 0]

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