これは、StevenSkienaによるAlgorithmDesignからの質問です(インタビューの準備用)。
グラフGのアーティキュレーション頂点は、削除によってGが切断される頂点です。Gをn個の頂点とm個のエッジを持つグラフとします。削除がグラフを切断しないように、n個の頂点の削除順序を見つける単純なO(n + m)を与えます。
これは私が思ったことです:
グラフでDFSを実行し、各ノードの到達可能な最も古い祖先を更新し続けます(これに基づいて、ブリッジカットノード、親キュートノード、またはルートカットノードのいずれであるかを決定します)
リーフノード(頂点)またはアーティキュレーション頂点ではないノードが見つかった場合は、それを削除します。
DFSの最後に、アーティキュレーション頂点であることが判明したグラフ内のすべてのノードが残ります。
アーティキュレーションの頂点はそのままなので、グラフは接続されたままになります。いくつかのグラフで試してみましたが、うまくいくようですが、本には単純すぎるように感じます。