Official

G - Two Step Sort Editorial by nxteru


説明を簡単にするため問題を言い換えます。(言い換えなくても解けると思います。)また ここでは \((1,2, \ldots , n)\) を並び替えた数列を順列と表すことにします。

順列 \(P=(P_1 , P_2 , \ldots , P_n)\) と順列 \(Q=(1,2, \ldots , n)\) が与えられる。コスト \(A_i\) をかけて\(P\)\(i\) 番目の値を自由に書き換えることができる。コスト \(B_i\) をかけて \(Q\)\(i\) 番目の値を自由に書き換えることができる。書き換えた後 \(P\)\(Q\) が同じ順列になっていなければならない。

この問題で書き換えないで残すもののコストを最大化したいと言い換えます。まず \(P\)\(Q\) で同じ場所なのに異なる数である場合その \(2\) つは同時には残せません。またある数 \(i\)\(P\)\(Q\) で異なる場所にある場合もその \(2\) つは同時には残せません。この \(2\) つの条件を満たせばあとはすべて残すことができます。同時に残せないペアを辺で結ぶと円環になっています。適当なところで切って順番に並べると、数列上で隣り合うものを同時に選べないという問題になるので \(dp\) で解くことができます。計算量は \(O(N)\) です。

posted:
last update: