Все статьи и конспекты
MSTКрускалПримDSUГрафы
1 мин чтение

Минимальное остовное дерево (MST): Алгоритмы Крускала и Прима

Лемма о безопасном ребре и правило разреза. Алгоритм Крускала со структурой DSU (СНМ) за O(E log V). Алгоритм Прима с очередью с приоритетами за O(E log V).

Исходная заготовка: полнота объяснения и примеров ожидает редакторской проверки.

Лемма о безопасном ребре

Пусть G=(V,E,w)G = (V, E, w) — связный взвешенный граф, A⊂EA \subset E — подмножество ребер, входящих в некоторый MST. Разрез (S,V−S)(S, V - S) графа GG согласован с AA, если ни одно ребро из AA не пересекает разрез.

Лемма: Если ребро (u,v)(u, v) является легким ребром (имеет минимальный вес среди всех ребер, пересекающих разрез), то оно является безопасным для добавления к AA.
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;
}

Что дальше?

Закрепите материал задачей: Повторить число.

Изучено — к практике →

Отметка сохранится в этом браузере. Её можно отменить или снять кнопкой «Изучено».