templatetypedef, использование OP "BFS" предполагает, что график является невзвешенным.
Вот алгоритм, который работает во времени, пропорциональном сумме для каждого корня в итоговой коллекции размера подграфа, достижимого из этого корня. Для, скажем, графиков ограниченной степени это порядка размера вывода.
Ради уникальности я собираюсь предположить, что «кратчайший путь» означает наименьший в порядке длина-лекс. На высоком уровне мы вычисляем порядок, в котором нужно обрабатывать вершины, так что если дерево BFS вершины u объединяет вершины v, то u упорядочивается до v. Каждая вершина обрабатывается за линейное время, что включает определение вершин, которые она включает.
Порядок вычисляется путем нахождения сильных компонентов, топологической сортировки сильных компонентов и последующего произвольного упорядочения вершин внутри каждого отдельного компонента. Ясно, что u включает v только в том случае, если множество вершин, достижимых из u, является правильным надмножеством вершин, достижимых из v.
Чтобы обработать вершину u, вычислите дерево BFS из u, а затем определите набор вершин, у поддеревьев которых нет дуги, выходящей из поддерева - это те, которые попадают в категорию. Определите последний, пройдя сначала по глубине дерева, записав для каждой вершины v интервал I (v), левая конечная точка которого является временем входа, а правая конечная точка - временем выхода. Для каждой вершины v вычислим наименьший интервал J (v), содержащий I (v) и все I (w) с дугой v-> w. Используя DFS, вычислим для каждой вершины v наименьший интервал K (v), содержащий K (w), для всех потомков w из v. Вершина v, отличная от u, определяется как тогда и только тогда, когда K (v) = I (v) .
Почему это должно работать? Мы знаем, что поддерево v дерева с корнем в u является подмножеством дерева с корнем в v. Предположим, что u включает v (другими словами, эти два дерева равны). Затем ясно, что голова каждой дуги из поддерева v переходит в поддерево v, иначе голову нужно было исследовать. И наоборот, предположим, что u не включает v. Дерево с корнем в v содержит вершину, не входящую в поддерево v, и, таким образом, дуга покидает поддерево v.
Я надеюсь, что это описание будет полезным для вас, но я боюсь, что ваш фактический вопрос связан с быстрыми запросами по кратчайшему пути точка-точка с субквадратичным пространством, для которых могут быть более подходящие подходы.