Задача о динамической связности — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Обобщение задачи для произвольных графов)
Строка 10: Строка 10:
 
Если задача такова, что в графе нет и не может быть циклов, то она сводится к задаче о связности в [[Деревья Эйлерова обхода|деревьях эйлерова обхода]]. Время работы каждого запроса для упрощённой задачи {{---}} <tex>O(\log n)</tex>.
 
Если задача такова, что в графе нет и не может быть циклов, то она сводится к задаче о связности в [[Деревья Эйлерова обхода|деревьях эйлерова обхода]]. Время работы каждого запроса для упрощённой задачи {{---}} <tex>O(\log n)</tex>.
 
== Обобщение задачи для произвольных графов ==
 
== Обобщение задачи для произвольных графов ==
написать про уровни и остовные леса <tex>\mathrm{navernoe.}</tex>
+
 
 +
Существуют задачи, в которых граф не обязательно на протяжении нашей работы после каждой операции добавления ребра остаётся лесом. Но мы можем в каждой компоненте связности выделить [[https://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%81%D1%82%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F:_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D0%BB%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%BC_%D1%80%D0%B5%D0%B1%D1%80%D0%B5|остовные деревья]], которые образуют остовный лес.
 +
 
 +
 
 +
 
 +
<!--Рассмотрим возможные случаи изменения графа с точки зрения связности после выполнения update-запросов.-->
 +
 
 +
<!--После операции добавления могло возникнуть следующее:
 +
* вершины у и в лежали в одной компоненте связности, значение коннектед() до и после запроса не изменилось ни для какой пары вершин
 +
* вершины лежали в разных компонентах, теперь новое ребро их соединило 12321232123212321232123212321
 +
 
 +
После операции удаления:
 +
* если удаляемое ребро - мост, то компонента связности распалась на две
 +
* иначе значение коннектед() осталось прежним для любой пары вершин
 +
 
 +
чё это значит? смотрим видосик!!!-->
 +
 
 
<!-- === Псевдокод === xz -->
 
<!-- === Псевдокод === xz -->
 
<!--== Алгоритм ==
 
<!--== Алгоритм ==
Строка 16: Строка 32:
 
== Частные случаи == // hahaha there is only one specific kind))0)
 
== Частные случаи == // hahaha there is only one specific kind))0)
 
=== Деревья === //yes
 
=== Деревья === //yes
  === Планарные графы === //da xz chtobi o nih govorit' ischo... -->
+
  === Планарные графы === //da xz... chtobi o nih govorit' ischo... -->
 +
 
 
== ==
 
== ==
 
<!--
 
<!--

Версия 22:24, 7 января 2018

Задача:
Есть неориентированный граф из [math]n[/math] вершин, изначально не содержащий рёбер. Требуется обработать [math]m[/math] запросов трёх типов:
  • [math]\mathrm{add(u,v)}[/math] — добавить ребро между вершинами [math]u[/math] и [math]v[/math];
  • [math]\mathrm{remove(u,v)}[/math] — удалить ребро между вершинами [math]u[/math] и [math]v[/math];
  • [math]\mathrm{connected(u,v)}[/math] — проверить, лежат ли вершины [math]u[/math] и [math]v[/math] в одной компоненте связности.

В этой статье будет приведено решение задачи online, то есть отвечать на get-запрос (проверять наличие пути между вершинами) мы будем сразу.

Динамическая связность в лесах

Если задача такова, что в графе нет и не может быть циклов, то она сводится к задаче о связности в деревьях эйлерова обхода. Время работы каждого запроса для упрощённой задачи — [math]O(\log n)[/math].

Обобщение задачи для произвольных графов

Существуют задачи, в которых граф не обязательно на протяжении нашей работы после каждой операции добавления ребра остаётся лесом. Но мы можем в каждой компоненте связности выделить [деревья], которые образуют остовный лес.




См. также

Источники информации