MSTКрускалПримDSUГрафы
1 мин чтение
Минимальное остовное дерево (MST): Алгоритмы Крускала и Прима
Лемма о безопасном ребре и правило разреза. Алгоритм Крускала со структурой DSU (СНМ) за O(E log V). Алгоритм Прима с очередью с приоритетами за O(E log V).
Исходная заготовка: полнота объяснения и примеров ожидает редакторской проверки.
Лемма о безопасном ребре
Пусть — связный взвешенный граф, — подмножество ребер, входящих в некоторый MST. Разрез графа согласован с , если ни одно ребро из не пересекает разрез.
Лемма: Если ребро является легким ребром (имеет минимальный вес среди всех ребер, пересекающих разрез), то оно является безопасным для добавления к .
cpp
// Алгоритм Крускала
struct Edge { int u, v, w; };
int kruskal(int n, vector<Edge>& edges) {
sort(edges.begin(), edges.end(), [](auto& a, auto& b) { return a.w < b.w; });
DSU dsu(n);
int mstWeight = 0;
for (const auto& e : edges) {
if (dsu.unite(e.u, e.v)) {
mstWeight += e.w;
}
}
return mstWeight;
}
Что дальше?
Закрепите материал задачей: Повторить число.
Изучено — к практике →Отметка сохранится в этом браузере. Её можно отменить или снять кнопкой «Изучено».