С прошлых пар
- Теорема Дилворта.
- Транзитивное замыкание графа.
- Покрытие путями = паросочетание в транзитивно замкнутом графе.
- N - кол-во вершин, M - размер паросочетания, тогда число путей = N - M.
- Размер любой антицепи <= размера любого покрытия путями
- Рассмотрим контролирующее множество в графе из 2N вершин. Его размер = M.
- Если из исходного графа выкинуть все <= M вершин, половинки которых задействованы в контролирующем множестве, получится антицепь.
- Размер антицепи = N - M. Значит max AntiChain = min PathCover.
- Теорема Татта-Берджа.
- maxM <= down(V/2)
- maxM <= сумма по всем компонентам связности down(Vi/2)
- maxM <= V - (число нечетных компонент связности) = V - odd(G) = f(G)
- maxM <= |U| + f(G/U) для любого U
- maxM = min по U (|U| + f(G/U))
- Если есть вершина x, такая, maxM(Gx) < maxM(G), удаляем ее.
- Получили граф, в котором удаление любой вершины не влияет на maxM
- Докажем, что maxM = V - odd. От противного: пусть в какой-то компоненте связности есть 2 свободные вершины s и t.
- Строим дополняющий путь (s,t).
Двусвязность, сильная связность: теория
- Сильная
- Орграф. Для любых s и t есть путь из s в t.
- Сильная связность - отношение эквивалентности для вершин
- Реберная
- Мост - ребро, при удалении которого теряется связность. Определение = нет мостов.
- Реберная двусвязность - отношение эквивалентности для вершин
- Т1: def <=> между любыми двумя вершинами есть 2 непересекающихся по ребрам пути (док-во = поток)
- Т2: def <=> для любых вершин a, b и ребра e есть путь из a в b не проходящий через e.
- T3: def <=> ребра графа можно ориентировать так, что полученный граф сильно связен
- Вершинная
- Точка сочленения - вершина, при удалении которого теряется связность. Определение = нет точек сочленения.
- Т1: def <=> между любыми двумя вершинами есть 2 непересекающихся по вершинам пути (док-во = вершинный поток)
- Т2: def <=> для любых вершин a, b и вершины v есть путь из a в b не проходящий через v.
- T3: def <=> для любых вершин a и b существует простой цикл, проходящий через них.
- T4: def <=> для любых вершины a и ребра e существует простой цикл, проходящий через них.
- T5: def <=> для любых ребер e1, e2 существует простой цикл, проходящий через них.
Двусвязность, сильная связность: алгоритмы
- Все можно делать за O(VE). В лоб.
- dfs за O(E). Время входа и время выхода.
- Сильная связность за O(E) в 2 dfs-а. Тестирование на 10 min-тестах.
- Реберная двусвязность за O(E). Компоненты реберной двусвязности.
- Вершинная двусвязность за O(E). Компоненты вершинной двусвязности.
- Сильная связность за O(E) одним dfs-ом = алгоритм Тарьяна.
- Сильная связность за O(E) двумя dfs-ами:
- Если ориентировать все ребра по dfs-у, то компоненты сильной связности = компонентам реберной двусвязности
Эйлеровость.
- Критерий эйлеровости.
- Поиск эйеровых пути и цикла за O(E) в лоб (найдем циклы, склеим циклы)
- Поиск эйеровых пути и цикла за O(E) одним dfs-ом.
- Дополнение графа до Эйлерова.
Гамильтоновость
- Теорема Дирака (1952): если у любой вершины deg >= n / 2, граф гамильтонов.
- Алгоритм построения за O(N3) и док-во. На самом деле алгоритм работает за O(N2).
- Теорема Оре (1960): deg v + deg u >= N для любых u и v не связных ребром.
- Теорема 3: deg[k] > k для всех k < n / 2, где deg[i] - i-я по возрастанию степень.
- Теорема Хватала (1972): признак гамильтоновости (deg[k] <= k < n / 2) => (deg[n-k] >= n - k)
- Турниры - алгоритм поиска Гамильтонова пути за O(N2)
- Турниры - алгоритм поиска Гамильтонова цикла за O(N3)
- Турниры - алгоритм поиска Гамильтонова цикла за O(N2)