難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) Lv.6.0 (1票)

投票の分布
  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.61票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

LR Minimum Spanning Tree

作成者 mackerel38

テスター kazuppa、loop0919

難易度(作成者設定) Lv.7

難易度(投票) Lv.6.0 (1票)

実行時間制限
2 秒
メモリ制限
512 MiB

解説

pi,qip_i, q_i をそれぞれ (L1,L2,…,Li),(Ri,Ri+1,…,RN)(L_1, L_2, \dots, L_i), (R_i, R_{i+1}, \dots, R_N) の最小値をとる添字のうち最小のものとする。

1≤i<N1 \le i \lt N に対して、次の 33 つの辺を考える。

  • 頂点 pip_i と頂点 i+1i+1 を結ぶ辺
  • 頂点 ii と頂点 qi+1q_{i+1} を結ぶ辺
  • 頂点 pip_i と頂点 qi+1q_{i+1} を結ぶ辺

これら 3(N−1)3(N-1) 本の辺を 良い辺 とする。 良い辺 のみを用いて最小全域木が必ず存在することを示す。

頂点 ii と頂点 jj を結ぶ辺を考える。ただし (i<j)(i \lt j) とする。

i≤k<ji \le k \lt j を満たす任意の tt について

Lpk≤Li, Rqk+1≤RjL_{p_k} \le L_i, ~ R_{q_{k+1}} \le R_j

であるので頂点 pkp_k と頂点 qk+1q_{k+1} を結ぶ辺の重みは Li+RjL_i + R_j 以下である。

また、pk≠pk+1p_k \neq p_{k+1} かつ qk≠qk+1q_k \neq q_{k+1} のとき、pk+1=qk+1=k+1p_{k+1} = q_{k+1} = k+1 であるので、頂点 pkp_k と頂点 qk+1q_{k+1} を結ぶ辺と、頂点 pk+1p_{k+1} と頂点 qk+2q_{k+2} を結ぶ辺は必ず端点を共有する。

すなわち、頂点 i,ji, j (i<j)(i \lt j) において、重み Li+RjL_i + R_j 以下の 良い辺 のみからなる長さ 22 以上のパスが存在する。

良い辺 以外の辺 (x,y)(x, y) を含む最小全域木 TT があると仮定する。 TT から辺 (x,y)(x, y) を削除するとグラフ 22 つの連結成分 S1,S2S_1, S_2 に分かれる。 重み Li+RjL_i + R_j 以下の 良い辺 であって S1,S2S_1, S_2 を連結にするようなものは必ず存在するので、これを追加することで再び最小全域木を構成できる。この操作を繰り返すことで、 良い辺 のみからなる最小全域木が必ず存在することが示された。

よって、3(N−1)=O(N)3(N-1) = O(N) 本の辺を用いてクラスカル法などで最小全域木を求めることで、 O(Nlog⁡N)O(N \log{N}) でこの問題を解くことができた。

ユーザー解説

ユーザー解説を書く