Поиск в глубину: сильная связность (10 декабря 2024)
- Примеры графов, определения
- Слова: граф, смежность, инцидентность, орграф, неорграф.
- Друзья/знакомства, зависимости между работами/пакетами, страны и дороги
- Граф состояний (два героя дубасят друг другу: состояние = <хп1,мана1,позиция1,хп2,мана2,позиция2>).
- Хранение графа
- Если удалять рёбра? vector<set<int>>
- Если плотный граф V = 10 000? vector<bitset>
- Если хотим минимизировать память? sizeof(vector<int>) = 24, мультисписок
- Кодим dfs
- Рекурсия + пометка вершин. Время работы.
- Поиск компонент связности. Время работы.
- Восстановление пути на обратном ходу рекурсии
- Применения dfs
- Поиск цикла.
- Остовное дерево dfs. Классифицакия рёбер.
- Topsort.
- [20 минут] Компоненты сильной связности
- Тривиальный алгоритм поиска за O(kE)
- Алгоритм поиска за O(V+E) двумя dfs (topsort + красим по обратным рёбрам)
- Доказательство корректности (любая достижимая по обратным рёбрам другая компонента уже покрашена)
- Конденсация сс. Определение, построение.