Сведение задачи LCA к задаче RMQ
Версия от 07:25, 25 марта 2011; 192.168.0.2 (обсуждение)
Постановка задачи LCA
Определение: |
Наименьший общий предок (least common ancestor) двух узлов | в корневом дереве - это такой узел который среди всех узлов, являющихся предками как узла так и имеет наибольшую глубину.
Пусть дано корневое дерево
На вход подаются запросы вида для каждого запроса требуется найти их наименьшего общего предка.Алгоритм
Препроцессинг
1) В каждом узле будет храниться глубина узла в корневом дереве
2) Ориентируем каждое ребро в дереве
и добавим обратное к этому ребру. Получим эйлеров граф . Найдем в графе эйлеров цикл, записывая в массив глубину посещенных узлов.3) Построим дерево отрезков по полученному массиву.