NOI 2020のいくつかの質問に対する解決策

食通

このデータ範囲は、この問題が行列の高速累乗を必要とすることを示しています。

最初にk = 0 k = 0を考えますk=0各ポイントを5つのポイントに分割すると、エッジの重みはすべて1になります11、それからフロイドが最長の道を見つける。転送は一般化された行列の乗算であり、これは連想則を満たし、行列の高速パワーに適用できます。

k≠0 k \ neq 0 k=0診察室での練習のほうが激しいので、直接フードフェスティバルの時間を並べて、セクションごとに暴力を求めます。時間の複雑さはO(125×n 3×k log⁡T)O(125 \ times n ^ 3 \ times k \ log T)O 1 2 5××klo gT 、出発まで55分。

行列の乗算は、1から1であるため、応答行列に遷移行列を乗算したものです。1が始まるので、回答マトリックスには最初の行のみが必要です。時間の複雑さはO(25×n 2×k log⁡T)O(25 \ times n ^ 2 \ times k \ log T)です。O 2 5×2×klo gT

料理を作る

n − 2≤mn-2 \ leq mが見つかりませんでした2mの性質として、ネットワークフローについて考え、ゼロにバーストします。

トピックに戻ると、このプロパティは、この質問がネットワークフローではないことを示しています。次に、部品はn − 1≤mn-1 \ leq mに分割されます1m、次にn − 1 = m n-1 = mと考える1=mの構成方法。

最小および最大のddd最小のddを取り出して料理を作るd使い果たされ、次に最大の残りのddd投げて戻します。これは、問題の規模を小さくすることと同じです。この構造が正しいことがわかります。バランスの取れたツリーまたはセットを使用して、それを維持します。

以下のためのn≤MN \当量メートルm、毎回最大のddを選択できますd調理し、n − 1≤mn-1 \ leq mになるまで投げ返す1m

以下のためのM = N - 2 M = N-2メートル=2. nnの変更を検討する2つのセットの合計がkkの場合、 n個の原材料は2つの再セットに分割されます。kの場合、2つのm = n − 1 m = n-1に分割することと同じです。メートル=1つの状況。これは典型的な01存在のバックパックで、複雑さはO(n 2 k)O(n ^ 2k)です。O n2 k状態は01だけなので、ビットセットで最適化でき、時間の複雑さはO(n 2 k 64)O(\ frac {n ^ 2k} {64})です。O 6 42 K

おすすめ

転載: blog.csdn.net/qq_39984146/article/details/108144642