Изменения

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

Сведение задачи LCA к задаче RMQ

268 байт добавлено, 17:48, 29 мая 2021
Препроцессинг
#Список посещений узлов <tex>\mathtt{vtx}</tex>, строящийся аналогично предыдущему, только добавляется не глубина а сама вершина.
#Значение функции <tex>\mathtt{I}[u]</tex>, возвращающей индекс в списке глубин <tex>d</tex>, по которому была записана глубина вершины <tex>u</tex> (например на момент входа в вершину).
 
Вот таким образом будут выглядеть эти три массива после обхода в глубину:
 
[[Файл:HoD8KSiOzTg.jpg‎ | мини | left | 700x500px| Пример массива <tex>\mathtt{vtx}</tex>]]
<br clear="all">
=== Запрос ===
Будем считать, что <tex>\mathrm{rmq}(d,l,r)</tex> возвращает индекс минимального элемента в <tex>d</tex> на отрезке <tex>[l..r]</tex>. Тогда ответом на запрос <tex>\mathrm{lca}(u, v)</tex>, где <tex>\mathtt{I}[u] \leqslant \mathtt{I}[v]</tex>, будет <tex>\mathtt{vtx}[\mathrm{rmq}(d,\mathtt{I}[u], \mathtt{I}[v])]</tex>.
 
=== Доказательство корректности алгоритма ===
{{Теорема
2
правки

Навигация