Назначение связности графа - PullRequest
2 голосов
/ 17 июля 2009

Кто-нибудь знает алгоритм для следующей задачи:

Учитывая ненаправленный связный граф, найдите количество способов, которыми 2 отчетливые ребра могут быть обрезаны так, что график становится несвязным.

Я думаю, что частью проблемы (для которой я знаю алгоритм) является вычисление количества способов, которыми 1 линия может быть обрезана, чтобы она стала отключенной. Затем вычисление того, как они могут быть сгруппированы с другими строками, получает значение (M-K)*K + K*(K-1)/2, M = нет. ребер, K = нет. из 1 порезов.

Часть, которую я не знаю, как сделать, это найти количество других способов вырезать 2 линии, например, на графике, который имеет только цикл 1 - 2 - 3 - 1 любая комбинация ребер является допустимым способом резки линии, чтобы отключить график.

Я закодировал часть программы, которая находит все срезы по 1 ребру, а затем разделил график на двусвязные компоненты, удалив эти ребра. Я пытался написать что-то для второй части, сделал для этого 2 версии, но ни одна из них не получила правильного ответа на каждый тест.

Дополнительная информация об этой задаче: * Количество ребер <100 000 * Количество вершин <2000 * Программа должна работать максимум 2 секунды на любом графике с вышеуказанными ограничениями * Между двумя вершинами может быть несколько ребер. </p>

Я могу сделать первую часть в O (N + M). Я предполагаю, что сложность для второй части должна быть максимальной O (N * M).

Ответы [ 3 ]

0 голосов
/ 17 марта 2012

Эта проблема является расширением проблемы 2-граничного соединения. Чтобы убедиться, что любое ребро (v, w) в графе не является мостом, мы находим задний край из вершин adjacent to w and including w, идущий к ancestor of v. Здесь предок означает вершины, которые были обнаружены до v. Теперь, если есть только один такой задний край, тогда that back-edge and (v, w) после удаления отключит график.

0 голосов
/ 17 июля 2009

Тривиальное решение: для всех пар ребер удалите их из графика и посмотрите, все ли еще связано. Это O (n ^ 3), но должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...