考察メモ yukicoder contest 340 C No.1910 High Element on Grid

yukicoder contest 340 C
No.1910 High Element on Grid
https://yukicoder.me/problems/no/1910

 

自分の失敗方針
 A_{ij}を頂点とみなし、大小関係を決めた2頂点間に有向辺を張ることを考えた。
R_i, C_jを満たすように、かつループができないように有向辺を張ることができれば、
トポロジカルソートすることで全ての大小関係を満たす数値を振ることができて、解ける。
しかし、ループができないような張り方を思いつくことができず。

 

正解方針
 R_1=C_1=1を満たすには、左上( A_{11})を \inftyにしさえすればよく、
残りの上辺と左辺( A_{12}~ A_{1W} A_{21}~ A_{H1})は自由にできる。
つまり、例えば A_{1j}なら、縦一列( A_{1j}~ A_{Hj})に対する条件である C_jを満たすことに全力投球できる。
そこで、 A_{1j}以外( A_{2j}~ A_{Hj})を特定の状態にしておいて、 A_{1j}だけ調整することで C_jを満たせないか考えてみる。
これは可能で、 A_{2j}~ A_{Hj}を昇順にしておけば、 A_{1j}の調整だけで「高い項」の個数を1~Hまで任意に実現できる。
横一列も同様に実現できるのでこれで解ける。


無理やり考察典型化
「構築問題で自由度が高いところを見つけたら、そこだけ調節して条件を満たせないか考えてみる」
今回、左上を \inftyにすること、更にそれにより上辺と左辺は自由な値を取れることまで気が付いていた。
それを生かすことができなかった。もう少し生かそうと考えていれば思いつけていたような気がする。