Изменения

Перейти к: навигация, поиск

Level Ancestor problem

11 байт добавлено, 19:15, 4 сентября 2022
м
rollbackEdits.php mass rollback
Это улучшение Longest-path декомпозиции, позволяющее, как мы потом докажем, подниматься на любую высоту за <tex>O(1)</tex>. Выполним его следующим образом: увеличим каждый путь в два раза вверх, для каждого нового пути сохраним все входящие в него вершины,
а для каждой вершины сохраним ее номер в пути, в который она входит. Построение обычной longest-path декомпозиции займет у
нас <tex>O(n)</tex> времени (обход в глубину), удлиннение удлинение каждого пути не ухудшит асимптотику.
После этого посчитаем двоичные подъемы для каждой вершины за <tex>O(\log n)</tex>, получим итоговую оценку <tex>O(n \log n)</tex> на предподсчет.
i = <tex>\lfloor \log_2 n \rfloor</tex>
v = p[i][v] ''<font color="green">// делаем максимально большой прыжок вверх</font>''
i = n - <tex>2^i </tex> ''<font color="green">// на столько осталось еще подняться</font>''
'''return''' ladder[way[v]][num[v] - i] ''<font color="green">// так как теперь <tex>v</tex> и ответ находятся на одном пути</font>''
1632
правки

Навигация