При этом, для быстрого удаления ребра, нужно для каждой пары хранить количество путей их связывающих.
А как это хранение при удалении ребра обновлять быстрее, чем обновлять транзитивное замыкание?
Обозначим ребро от вершины a до вершины b как (ab), множество вершин, из которых достижима вершина a через U(a), множество вершин которые достижимы из вершины b как D(b). Сами вершины тоже входят в соответствующие мн-ва. Элементы соответствующих мн-в обозначаем буквой в нижнем регистре (например,
). Кол-во путей от c к d обозначим
(
). Тогда, добавление ребра (ab) приводит к следующим изменениям кол-ва путей:
. Остальные "счётчики" остаются неизменными. Удаление ребра приводит к обратному изменению "счётчиков". При этом,
, очевидно, эквивалентно отсутствию путей, и такие пары можно просто не хранить/удалять.
-- 03.01.2015, 01:28 --Есть две идеи, которые я пока не знаю как (можно ли) развить.
1. Рёбра, входящие в вершину b можно интепретировать как операцию объединения:
. Тогда, пометка пары вершин (cb) будет означать
2. Считать, что рёбра имеют цвет и пометка пары вершин означает, например, добавление чёрного ребра. Соответсвенно, как-то вести учёт моно/полихромных путей.