Про графы [см. 2012-02-09]
- Сила dfs-а
- 2-связность (реберная и вершинная, алгоритм со стэком)
Про игры [см. 2012-02-16]
- Функция Смита (без док-ва)
- Смысл: то же, что и Гранди, только с циклами
- Определение
- Вычисление функции Смита за O(VE) = while (run) do
Перебор
- Полный перебор (на примере задачи paths с контеста)
- Рекурсия.
- Мир глобален, не копируется, после отката из рекурсии возвращается в старое состояние.
Задачи (примеры) к теме перебор
- Японский комьютер: нужно получить какое-то множество чисел от 1 до 42. Изначально есть только число 1. Допустимые операции: +, -, *2k.
- Поезда: заказ = отрезок [Li, Ri] и кол-во пассажиров Ki. Вместимость поезда = C, нужно принять max число заявок.
- Самый длинный путь: меморизация + отсечение по ответу
Задачи (примеры) к графам
- Найти путь из A в B : max вес ребра в пути минимален
- Для каждой пары вершина A и B сделать (1)
- Дополнить граф до связного
- Дополнить граф до сильносвязного
- Найти диаметр графа (2 самые удаленные вершины)
- Найти диаметр дерева
- Проверить, является ли граф деревом
- Число способов пройти по шахматной доске конем из (1,1) в (N,N).
- Маша и грибы (Маша ходит по матрице и собирает грибы, ходить можно только вниз и вправо, нельзя врезаться в деревья).
- Найти расстояние от множества A до множества B в невзвешенном графе.
- Найти расстояние от множества A до множества B во взвешенном графе.
- Д.З. Разбить кактус на циклы
Задачи (примеры) на стурктуры данных
- Найти подотрезок с максимальной суммой.
- Найти подматрицу с оптимальной суммой.
- Найти путь в дереве с XOR-ом всех чисел = нолю.
- Пусть у нас есть массив перестановок и запрос на отрезке [L..R] = применить все перестановки с L-й по R-ю.
Одномерные Структуры данных
- Не меняющийся массив - продолжение
- Минимум на отрезке фиксированной длины за O(1) с предподсчетом за O(N)
- Обобщение до матрицы
- Меняющийся массив
- Корневая оптимизация [sqrt(N)]
- Отложенныее операции [sqrt(N)]
- Одномерное Дерево Отрезков для суммы (запрос снизу) [logN]
- Дерево Фенвика для суммы [logN]
- Деревья отрезков
- Запрос снизу для суммы, для минимума, для любой ассоциативной операции
- Запрос сверху
- += на отрезке для запросов сверху
- присваивание на отрезке для запросов сверху
- Решение задачи K-е число в множестве
- Решение задачи следующее число в множестве
- LCA в дереве = RMQ на отрезке (RMQ ±1) [Эйлеров обход за O(N)]
- RMQ на отрезке = LCA в дереве [постоение Декартового Дерева за O(N)], получили LCA за [O(NlogN), O(1)]
- Сумма в дереве (даже меняющемся) = LCA + сумма на отрезке