Я хотел бы спросить о следующей проблеме:
Учитывая ориентированный граф (не обязательно DAG), для каждой вершины v вычислите число достижимых вершин из v.
Таким образом, используя подход грубой силы (n раз DFS), мы можем получить ответ за O (n ^ 2) временной сложности.Есть ли способ рассчитать это быстрее?Я могу определенно сделать DAG из данного графика, используя SCC.Я пытался использовать ранее вычисленные значения, чтобы я мог посетить каждую вершину только один раз, но это не работает вообще.Самая большая проблема заключается в таком графике:
2 -> 1
3 -> 2
3 -> 1
1 -> 4
Я запускаю DFS из вершины 1 и возвращаю результат 1. Затем, используя его, я могу сразу вычислить ответ для 2 (я больше не вхожу в вершину 1во втором DFS я использую его ответ вместо этого), то есть 2. Затем я добираюсь до вершины 3, и ... алгоритм суммирует результат 1 и 2, так как я могу достичь обеих этих вершин.Но вершина 1 уже вычислена в результате для вершины 2. Таким образом, я получаю ответ, равный 4, что неверно.