1

Тема: LCA online

Как решать эту задачу двоичным подъёмом в режиме онлайн? Нам ведь нужно определять является ли одна вершина предком другой. Я знаю, что если выполнить все запросы добавления, а потом найти все LCA, то тоже будет правильно, но мне интересно как решать эту проблему "влоб".

2

Re: LCA online

Если мы для каждой вершины знаем её глубину в дереве (расстояние от корня), то вроде бы можно - следующим образом:

* вот нам поступили на вход две вершины a и b, тогда возьмём ту из них, которая глубже, и поднимем двоичным подъёмом до глубины другой вершины
* теперь, когда обе вершины одной высоты, мы можем уже заметить, что LCA находится от них на одном и том же расстоянии
* значит, будем идти двоичным подъёмом - если мы шагнули от обеих вершин вверх и пришли в одну и ту же вершину, то это LCA или его предок (в общем, надо попробовать подняться на меньше), а иначе, т.е. если этим шагом пришли в разные вершины - надо попробовать подняться на больше.

3

Re: LCA online

Интересная идея, спасибо!