2/1 日記

ねむねむにゃんこ

PASTを進めていました

K - 巨大企業 (atcoder.jp)

単純に親を辿ることを考えると、子が1つの頂点が連なっていた場合にO(N^2)とかになって難しいことが分かる。aとbのLCAがbであればいいので、これで解ける。

J - 地ならし (atcoder.jp)

時間かかってしまって反省。

グリッドの左下をP, 右下をQ, 右上をRとし、グリッド上のある点Xに対し、

D(X) = PX + QX + RXを考える。D(X)の最小値が求める値であることが分かる ( XからP, Q, R への道がX以外で交わっているとすると、その点をYとしたときにXからYへの道が2つ以上存在することになり、どちらかの道を整備しなくても条件を満たすことから、最小性に反することが証明できる)。

なので、グリッド上の点Xを全探索し、この点からbfsによってD(X)を求めていけばいい。

O - 可変全域木 (atcoder.jp)

考え中。これみたいにk=1~Mについて求めよという問題は①こないだのABC-F - Shift and Inversions (atcoder.jp)みたいに、k=1の値(または以前に求めた値)を元に順々に求めていけるやつ、➁クエリを何かでソートしていい感じになるやつ③並列二分探索

くらいをまず考えたくて、これは③ではないかと思ってる(並列二分探索とUnion-Findは相性がいい気がしている)。

でも単純にUFを使おうとすると、使わなければいけない辺が異なるためにUFをM個用意するはめになって困る。なので、辺を重みでソートして小さい順に使っていき、ok or ngの判定をするときにa と bを辺でつないで、判定が終わったら辺を切るというのでどうかと考えている。

実装する気力はないので明日かな。

 

おやすみなさい。