公式
E - Swap or Reverse 解説
by
別の実装方針
E - Swap or Reverse 解説
by
toam
別の実装方針
次に進むべき頂点を見つける部分について,tester による別の実装方針です.
\(G_2\) の各頂点において,各隣接する頂点の「対応する \(G_1\) の連結成分の頂点のうち,まだ答えに追加されていない最小の番号」を優先度付きキューで保持することにします.最小の番号は逐次変化する可能性がありますが,優先度付きキューで取り出す際に更新も同時に行うことにします.具体的な手順は以下の通りです.
- 優先度付きキューの先頭にある最小の番号を \(v\),\(G_1\) において \(v\) が属する連結成分を \(g\) とする.
- \(g\) に属する頂点に進めないのであれば,先頭から \(v\) を削除し,手順の先頭に戻る.
- 答えにまだ \(v\) が含まれていないならば,次の頂点は \(v\) である.
- そうでない場合,先頭から \(v\) を削除し,\(g\) の連結成分の頂点のうちまだ答えに追加されていない番号を \(u\) として,\(u\) を優先度付きキューに追加し,手順の先頭に戻る.
この方針は陽に平方分割していませんが,計算量は全体で \(O((N+M)^{1.5}\log N)\) になることが証明できます.多重辺をまとめて持つ必要があることに注意してください.
実装例(https://atcoder.jp/contests/arc216/submissions/74341810 )
投稿日時:
最終更新:
