有向グラフのすべての根を O(n+m) で見つけるアルゴリズムを見つける必要があります。
単一のルートを見つけるためのアルゴリズムがあります。
- V の一部の v に対して DFS(v) を実行します。結果が単一のスパニング ツリーである場合、v はルートです。それ以外の場合、結果は木の森になります。それで:
- 最後のツリーのルートで DFS(u) を実行します。結果が単一のスパニング ツリーの場合、u はルートです。そうでなければ、グラフに根はありません。
すべてのルートを見つけたい場合、毎回最後のツリーの異なる頂点で上記のアルゴリズムを O(n) 回実行するのが最善の方法ですか? ルートが見つかったと仮定すると、別のルートが存在する場合、それは最後のツリーにある必要があります。「ルートが存在しない」を受け取るまで、またはすべての頂点を通過するまで上記のアルゴリズムを実行し続けると、それは O(n+m) になりますか?
前もって感謝します !