競技プログラミング総合スレ 66 (478レス)
競技プログラミング総合スレ 66 http://mevius.5ch.net/test/read.cgi/tech/1679465982/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
171: デフォルトの名無しさん (ワッチョイ 412d-dXWb) [sage] 2023/04/09(日) 18:19:09.47 ID:fcL4nlHr0 この部分は、既にマークされた頂点に対応する辺をスキップするために必要です。 確かに、キューには基本的にmarkedの値がFalseのノードしか入らないように見えますが、 実際には同じノードに対して複数の辺がキューに入ることがあります。 例えば、次のようなグラフを考えてみましょう。 1 -- 2 | / | / 3 各辺の重みはすべて1とします。最初に頂点1を選び、marked[1]=Trueとします。 次に、頂点1に隣接する辺をキューに追加します。 この時点でキューの状態は以下のようになります。 (1, 2), (1, 3) 次に、キューから最小の重みの辺を取り出し、それに接続されている頂点2をマークします。 頂点2に隣接する辺をキューに追加します。 この時点でキューの状態は以下のようになります。 (1, 3), (1, 1), (1, 3) ここで、次にキューから取り出す辺が(1, 1)であることに注意してください。 ただし、頂点1はすでにマークされているため、この辺を使ってしまうと、最小全域木の条件を満たさなくなります。 これが、以下のコード部分が必要とされる理由です。 if marked[i]: continue この部分によって、既にマークされた頂点に対応する辺をスキップし、 正しい最小全域木を構築することができます。 http://mevius.5ch.net/test/read.cgi/tech/1679465982/171
173: デフォルトの名無しさん (ワッチョイ 8255-dXWb) [] 2023/04/09(日) 18:25:07.45 ID:l3qXUMY00 >>171 あまり参考にならないだろうと思って読んでいたらなぜか理由が分かりました。 マークされていない状態で、同じノードが複数個ヒープに入ることがあるわけですね。 http://mevius.5ch.net/test/read.cgi/tech/1679465982/173
175: デフォルトの名無しさん (ワッチョイ 8255-dXWb) [] 2023/04/09(日) 18:28:12.80 ID:l3qXUMY00 >>171 この場合でいうとノード3が2回ヒープに入るわけですね。 http://mevius.5ch.net/test/read.cgi/tech/1679465982/175
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s