обратная операция к Union и найти

Мы знаем, что для непересекающихся множеств существует «Объединение и поиск». http://en.wikipedia.org/wiki/Union_find

Но как сделать обратную операцию? Рассмотрим набор с N узлами, соединенными с E ребрами (который на самом деле является графом). И на каждом шаге мы хотим удалить какое-то ребро и проверить, не приведет ли эта операция удаления к другому непересекающемуся множеству. Можно ли сделать это быстро, как в "Союз и находка"?

P.S. это не домашнее задание, у нас праздник :)


person Krzysztof Lewko    schedule 22.06.2011    source источник


Ответы (3)


Это известно как проблема удаления границы в сети или проблема с подключением к сети. Некоторые ссылки на алгоритмы находятся в этом статье Википедии о связности графов. .

person Rafał Dowgird    schedule 22.06.2011
comment
Спасибо за ссылку. Я могу найти только статьи для покупки на ACM. Не удалось найти информацию о TopCoder, прямую ссылку? :) - person Krzysztof Lewko; 22.06.2011

Итак, ваш вопрос заключается в том, как эффективно обнаружить Мост? Это можно сделать за линейное время (см. также ссылку).

person dcn    schedule 22.06.2011
comment
Учитывая, что @Chris, по-видимому, хочет выполнять операцию повторно (он говорит на каждом этапе), мы можем быть более эффективными, чем обнаружение мостов на каждом этапе. - person borrible; 22.06.2011
comment
я думаю, что если вы запустите этот алгоритм поиска мостов и отметите мосты и обратите внимание, что если к графу не будет добавлено ребро, новые мосты не появятся; все мосты, которые существуют в этом графе, остаются мостами по мере удаления ребер, а новые мосты могут появиться только в том случае, если вы удалите ребро, которое не является мостом; поэтому вам нужно только перезапустить алгоритм на двух подграфах, которые были соединены не мостовым ребром, которое было только что удалено. - person Dan D.; 22.06.2011

Union-find используется в алгоритме Крускала, который многократно добавляет ребро минимального веса, не образующее цикла. Обратная идея — удаление ребер максимального веса до тех пор, пока это не разъединяет граф — используется в алгоритм обратного удаления, который, по-видимому, может использовать некоторую сложную структуру данных (см. Википедию).

person sdcvvc    schedule 22.06.2011
comment
Следующая хорошая ссылка, но слишком обобщенная и не видно кода :( - person Krzysztof Lewko; 22.06.2011