Heavy-Light decomposition (3 марта 2016)
- Задача: сумма на пути, изменение в точке [O(n), O(logn)]
- Задачи (и разбор задач контеста)
- Переподвесить дерево, запрос LCA, online
- Дано дерево и число k. Найти за O(n) для каждой вершины v: up[v,k].
- Добавляются листья. Отвечать на запрос "размер поддерева". Offline, online.
- Euler tour tree: makeRoot (поменять корень), link (добавить ребро), cut (удалить ребро), isConnected (связны ли две вершины)
- Дан неориентированный взвешенный граф. Найти промежуток весов [l,r]: |r-l| → max, а рёбра с такими весами не образуют циклы
- Много запросов вида += на пути. В конце сказать веса всех вершин. O(m×LCA+n).
- Дано дерево, в вершинах стоят нули. Появляются единицы. Нужно говорить ближайший сверху ноль, ближайшую сверху единицу. Offline, online.
- Кодим Heavy-Light decomposition [code]
- Разбиение дерева на пути. Интерфейс структуры для пути.
- Добавляем для пути дерево отрезков.
- Добавляем кеширование запросов
- Задачи на Heavy-Light decomposition
- Запрос: найти число ≥ X, ближнее к вершине A на пути к вершине B. Версия, когда веса не меняются (делается без Heavy-Light), и когда веса меняются.
- Изменение в точке, минимум на пути в дереве.
- += на пути дерева, минимум на пути в дереве.