E067. Рёберная связность. Свойства и нахождение
Источник: e-maxx.ru/algo, страница PDF 204.
定义
Пусть дан неориентированный 图
с
vertexми и
рёбрами.
Рёберной связностью
图а
называется наименьшее number рёбер, которое нужно удалить, чтобы
图 перестал быть связным. На示例, для несвязного 图а рёберная связность равна нулю. Для связного 图а с единственным мостом рёберная связность равна единице.
Говорят, что множество
рёбер разделяет вершины
и
, если при удалении этих рёбер из 图а вершины
и
оказываются в разных компонентах связности. Ясно, что рёберная связность 图а равна минимуму от наименьшего числа рёбер, разделяющих две вершины
и
, взятому среди всевозможных пар
.
Свойства
Соотношение Уитни
Соотношение Уитни (Whitney) (1932 г.) между рёберной связностью
, вершинной связностью
и наименьшей из степеней вершин
: Докажем это утверждение. Докажем сначала первое неравенство:
. Рассмотрим этот набор из
рёбер, делающих 图 несвязным. Если
мы возьмём от каждого из этих ребёр по одному концу (любому из двух) и удалим из 图а, то тем самым с помощью удалённых вершин (поскольку одна и та же vertex могла встретиться дважды) мы сделаем 图 несвязным.
Таким образом,
. Докажем второе неравенство: . Рассмотрим вершину минимальной степени, тогда мы можем удалить все смежных с ней рёбер и тем самым отделить эту вершину от всего остального 图а. Следовательно, . Интересно, что неравенство Уитни нельзя улучшить: т.е. для любых троек чисел, удовлетворяющих этому неравенству, существует хотя бы один соответствующий 图. См. задачу "Построение 图а с указанными величинами вершинной и рёберной связностей и наименьшей из степеней вершин".
Теорема Форда-Фалкерсона
Теорема Форда-Фалкерсона (1956 г.): Для любых двух вершин наибольшее number рёберно-непересекающихся цепей, соединяющих их, равно наименьшему числу рёбер, разделяющих эти вершины.
Нахождение рёберной связности
Простой 算法 на основе поиска максимального потока
Этот способ основан на теореме Форда-Фалекрсона.
Мы должны перебрать все пары вершин
, и между каждой парой find наибольшее number непересекающихся
по рёбрам путей. Эту величину можно find с помощью 算法а максимального потока: мы делаем
истоком,
— стоком, а пропускную способность каждого ребра кладём равной 1. Таким образом, псевдокод 算法а таков:
int ans = INF;
for (int s=0; s<n; ++s)
for (int t=s+1; t<n; ++t) {
int flow = ... величина максимального потока из s в t ...
ans = min (ans, flow);
} Asymptotic complexity 算法а при использовании \edmonds_karp{算法а Эдмондса-Карпа нахождения максимального
потока} получается
, однако следует заметить, что скрытая в асимптотике
константа весьма мала, поскольку практически невозможно создать такой 图, чтобы 算法 нахождения максимального потока работал медленно сразу при всех стоках и истоках. Особенно быстро такой 算法 будет работать на случайных 图ах.
Специальный 算法
Используя потоковую терминологию, данная 题目 — это 题目 поиска глобального минимального разреза. Для её решения разработаны специальные 算法ы. На данном сайте представлен один из которых — 算法
Штор-Вагнера, работающий за время
или
.
References
● Hassler Whitney. Congruent Graphs and the Connectivity of Graphs [1932]
● Фрэнк Харари. Теория 图ов [2003]
C# 解法
自动草稿,提交前请检查using System;
using System.Collections.Generic;
using System.Linq;
public static class AlgorithmDraft
{
// Auto-generated C# draft from the original e-maxx C/C++ listing. Review before production use.
int ans = INF;
for (int s=0; s<n; ++s)
for (int t=s+1; t<n; ++t) {
int flow = ... величина максимального потока из s в t ...
ans = min (ans, flow);
}
}
C++ 解法
匹配/原始int ans = INF;
for (int s=0; s<n; ++s)
for (int t=s+1; t<n; ++t) {
int flow = ... величина максимального потока из s в t ...
ans = min (ans, flow);
}
Java 解法
自动草稿,提交前请检查import java.util.*;
import java.math.*;
public class AlgorithmDraft {
// Auto-generated Java draft from the original e-maxx C/C++ listing. Review before production use.
int ans = INF;
for (int s=0; s<n; ++s)
for (int t=s+1; t<n; ++t) {
int flow = ... величина максимального потока из s в t ...
ans = min (ans, flow);
}
}
Материал разбит как 算法ическая 题目: изучить постановку, понять асимптотику и реализовать 算法 на выбранном языке.
Vacancies for this task
活跃职位 with overlapping task tags are 已显示.