Задача о динамической связности — различия между версиями
(→Обобщение задачи для произвольных графов) |
(→Обобщение задачи для произвольных графов) |
||
Строка 11: | Строка 11: | ||
== Обобщение задачи для произвольных графов == | == Обобщение задачи для произвольных графов == | ||
− | Существуют задачи, в которых граф не обязательно на протяжении нашей работы после каждой операции добавления ребра остаётся лесом. Но мы можем в каждой компоненте связности выделить [[Остовные деревья: определения, лемма о безопасном ребре|остовные деревья]], которые образуют остовный лес. | + | Существуют задачи, в которых граф не обязательно на протяжении нашей работы после каждой операции добавления ребра остаётся лесом. Но мы можем в каждой компоненте связности выделить [[Остовные деревья: определения, лемма о безопасном ребре|остовные деревья]], которые образуют остовный лес. Граф и его остовный лес {{---}} одно и то же с точки зрения связности. |
[[Файл:Graph.jpg|550px|thumb|left|Произвольный граф]] [[Файл:Spanforest.jpg|550px|thumb|right|Остовный лес в графе]] | [[Файл:Graph.jpg|550px|thumb|left|Произвольный граф]] [[Файл:Spanforest.jpg|550px|thumb|right|Остовный лес в графе]] | ||
Строка 33: | Строка 33: | ||
Введём функцию <tex>l(e):e{\rightarrow}[0;\mathrm{\log} n]</tex> и назовём её ''уровнем ребра'' <tex>e</tex>. Будем рассматривать графы <tex>G_i=\langle V, E\rangle: {E|l(E) \geqslant i}</tex>. Очевидно, что <tex>G_{\mathrm{\log}n} \subseteq G_{\mathrm{\log}n-1} \subseteq ... \subseteq G_1 \subseteq G_0</tex>. Выделим в них остовные леса таким образом, чтобы <tex>F_{\mathrm{\log}n} \subseteq F_{\mathrm{\log}n-1} \subseteq ... \subseteq F_1 \subseteq F_0</tex>, где <tex>F_i</tex> {{---}} остовный лес графа <tex>G_i</tex>. | Введём функцию <tex>l(e):e{\rightarrow}[0;\mathrm{\log} n]</tex> и назовём её ''уровнем ребра'' <tex>e</tex>. Будем рассматривать графы <tex>G_i=\langle V, E\rangle: {E|l(E) \geqslant i}</tex>. Очевидно, что <tex>G_{\mathrm{\log}n} \subseteq G_{\mathrm{\log}n-1} \subseteq ... \subseteq G_1 \subseteq G_0</tex>. Выделим в них остовные леса таким образом, чтобы <tex>F_{\mathrm{\log}n} \subseteq F_{\mathrm{\log}n-1} \subseteq ... \subseteq F_1 \subseteq F_0</tex>, где <tex>F_i</tex> {{---}} остовный лес графа <tex>G_i</tex>. | ||
+ | Когда мы добавляем ребро, то мы можем сделать его ребром уровня <tex>0</tex>. Тогда изменится только <tex>G_0</tex> и, возможно, <tex>F_0</tex> (это произойдёт в том случае, если компоненты связности слились в одну, иначе же связность между каждой парой не изменилась, и остовный лес также не изменился. | ||
+ | |||
+ | При удалении | ||
<!--При выполнении операции add что-то хорошее, а с удалением не всё так просто.--> | <!--При выполнении операции add что-то хорошее, а с удалением не всё так просто.--> | ||
<!-- === Псевдокод === xz --> | <!-- === Псевдокод === xz --> |
Версия 00:03, 8 января 2018
Задача: |
Есть неориентированный граф из вершин, изначально не содержащий рёбер. Требуется обработать запросов трёх типов:
|
В этой статье будет приведено решение задачи online, то есть отвечать на get-запрос (проверять наличие пути между вершинами) мы будем сразу.
Содержание
Динамическая связность в лесах
Если задача такова, что в графе нет и не может быть циклов, то она сводится к задаче о связности в деревьях эйлерова обхода. Время работы каждого запроса для упрощённой задачи — .
Обобщение задачи для произвольных графов
Существуют задачи, в которых граф не обязательно на протяжении нашей работы после каждой операции добавления ребра остаётся лесом. Но мы можем в каждой компоненте связности выделить остовные деревья, которые образуют остовный лес. Граф и его остовный лес — одно и то же с точки зрения связности.
Введём функцию
и назовём её уровнем ребра . Будем рассматривать графы . Очевидно, что . Выделим в них остовные леса таким образом, чтобы , где — остовный лес графа .Когда мы добавляем ребро, то мы можем сделать его ребром уровня
. Тогда изменится только и, возможно, (это произойдёт в том случае, если компоненты связности слились в одну, иначе же связность между каждой парой не изменилась, и остовный лес также не изменился.При удалении