Ctrl K

Свои метки в поддереве

Средняя
Дано дерево из n вершин с номерами от 0 до n − 1; корень — вершина 0. Список links содержит n − 1 рёбер: пара [a, b] означает, что вершины a и b соединены (направление ребра не задано). Каждой вершине приписана метка — строчная латинская буква: метка вершины i равна marks[i]. Поддерево вершины v — это сама v и все её потомки, если смотреть от корня. Для каждой вершины v посчитайте, сколько вершин её поддерева имеют ту же метку, что и v (сама v тоже считается). Верните список длины n, где i-й элемент — ответ для вершины i.
Пример 1
n=5, links=[[0, 1], [0, 2], [2, 3], [2, 4]], marks="xyxxy" → [3, 1, 2, 1, 1]

Под вершиной 0 (метка x) лежат все пять вершин, из них с меткой x — 0, 2 и 3, ответ 3. Под вершиной 2 — вершины 2, 3, 4, из них x у 2 и 3, ответ 2. У остальных вершин в поддереве только они сами.

Пример 2
n=3, links=[[1, 0], [2, 1]], marks="qqq" → [3, 2, 1]

Дерево — цепочка 0 – 1 – 2 с корнем 0. Метки у всех одинаковые, поэтому ответ — просто размеры поддеревьев.

Пример 3
n=1, links=[], marks="k" → [1]
Ограничения
  • 1 ≤ n ≤ 10⁵
  • len(links) = n − 1, рёбра образуют дерево
  • 0 ≤ a, b < n, a ≠ b
  • len(marks) = n, marks состоит из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДерево по столбцам СредняяОстановить ветку процессов СредняяПоддерево над нижним рядом СредняяГде сходятся самые глубокие листья СредняяНаименьшая общая территория Средняя
загружаем Python…
Вход
n=5, links=[[0, 1], [0, 2], [2, 3], [2, 4]], marks="xyxxy"
Ожидается
[3, 1, 2, 1, 1]

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