Изменения
Нет описания правки
Дано дерево и набор запросов: пары вершин <tex>(v,u)</tex>, и для каждой пары нужно найти наименьшего общего предка. Запросы нам известны заранее, т.е задача сформулирована в режиме оффлайн.
Алгоритм позволяет найти ответы для дерева из <tex>n</tex> вершин и <tex>m</tex> запросов за время <tex>O (n + m)</tex>, т.е при достаточно большом <tex>m</tex>, за <tex>O (1)</tex> на запрос.
=== Алгоритм ===
Подвесим наше дерево за любую вершину, и запустим [[Обход в глубину, цвета вершин|обход в глубину]] из её.
Ответ на каждый запрос мы найдём в течение поиска в глубину. Ответ для вершин <tex>v</tex>, <tex>u</tex> находится, когда мы уже посетили вершину <tex>u</tex>, а так же посетили всех сыновей вершины <tex>v</tex>, и собираемся выйти из неё.