Official

E - Erasing Vertices 2 Editorial by PCTprobability


このまま問題の答えを考えるのは非常に難しそうです。なので、二分探索を行います。

二分探索をするには、以下の問題が解ければよいことになります。

問題文に書かれている操作を $N$ 回行う。しかし、全ての操作のコストは $X$ 以下である必要がある。$N$ 回の操作を全て行うことは可能か?

ここで、重要な性質があります。それは、ある段階で操作したときにコストが \(X\) 以下となる頂点はその後ずっとコストが \(X\) 以下であるということです。

なので、以下の貪欲法をすることで上記の問題を解くことができます

  • stack $s$ を持つ。始め $s$ は空である。
  • はじめの時点で操作してもいい頂点を全て $s$ に入れる。
  • $s$ が空でない限り、以下の操作を繰り返し行う。
    • $s$ から頂点を $1$ 個取り、これを $v$ とする。$s$ から $v$ を削除する。
    • また消されていない頂点に対して、操作にかかるコストを $A_v$ 減らす。
    • 上の操作により、操作してもコストが $X$ 以下となった頂点を $s$ に入れる。
  • 上記の操作を行い、全ての頂点を削除することができれば可能、そうでなければ不可能です。

よって、上記の問題を \(O(\log(N \times \max A))\) 回解くことによって元の問題の解を得ることができます。

計算量は \(\mathrm{O}((N+M)\log(N \times \max A))\) です。

posted:
last update: