Количество разрезов мощности 2

Revision ru1, by skrydg, 2016-01-28 10:33:11

Есть задачка:

http://acm.timus.ru/problem.aspx?space=1&num=1557

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

В комментариях я прочитал, что можно это сделать за n + m.

Я научился делать только за n * n.

Мое решение:

Рассмотрим дерево обхода dfs. Ребра разбились на 2 типа.(прямые и обратные)

Удалять 2 обратных нет смысла(Граф останется связным).

Удаляем прямое ребро и обратное. Это можно сделать, как при поиске мостов, только поддерживаем не только самую высокую ссылку на верх, а еще и вторую по высоте.

Удаляем 2 прямых ребра. Здесь мы просто перебираем два прямых ребра и смотрим разбился граф на два или нет.(Это делается, опять же при помощи поддержания нужных ссылок на верх.)

Это краткое описание моего решения. Но как делать быстрее?

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru1 Russian skrydg 2016-01-28 10:33:11 882 Первая редакция (опубликовано)