ABC351をA~DとFの5完。
Eはチェビシェフ距離ってことまで考えたけど詰めきれなかった、勿体無い様に感じるけど結局実は遠かったのかもしれない
ループするやつ。なんか足し忘れて地獄を見た
上側から見て木DPぽいやつもできるんだ〜ってやつ
半分全列挙でいけそうだけどわからんって言って解説見たらそうだったやつ。
ABC351をA~DとFの5完。
Eはチェビシェフ距離ってことまで考えたけど詰めきれなかった、勿体無い様に感じるけど結局実は遠かったのかもしれない
ループするやつ。なんか足し忘れて地獄を見た
上側から見て木DPぽいやつもできるんだ〜ってやつ
半分全列挙でいけそうだけどわからんって言って解説見たらそうだったやつ。
No.2741 Balanced Choice - yukicoder
upsolve。どっちも並行して考えてO(N**2*D)みたいになってたけど確かに0と1でやればN**2 * 2にできたなって感じ。
A~Eをバーチャル参加した。Fもできればやりたい。
辞書順最小で、最短のパスを作れ!という問題。
パスを作る際に出来るだけ後ろに大きい数を持っていきたいので、ゴール側から逆算して、シンプルに各マスから辿り着ける中で一番スタートに近いマスに進む動きをして、それを逆から見ればよい。
続きは明日やる
F - #(subset sum = K) with Add and Erase
昨日の問題。
例えば2,3,5を数として持っているときに、5を2通り作れるが、3を取り出したときに2,3からできた5と単体の5を区別できるのか?と疑問だったが、
確かに3がなくなったとき、dp配列にはこれまでの2,3,5で作れる数の場合の数が入っているため、現在の5の場合の数から、3がなくなった場合の2の場合の数を引いてやることで、3を使っていたパターンだけを引くことができると考えると納得した。
また、この手順のときに加算の場合は降順、減算の場合は昇順にやらないと手順がダブってバグるので注意。
ここ最近のやつ
結局0~200000までになる数はAiにiを加算より、iが大きくなると適する数がどんどん減って2000000くらいで済むやつ。思いつかなかった。
根付き木の構築として考えればよかったが、気づかなかった。
ADDとかDELETEから頂点のことだと思えばよかったのか?
頂点1から最小全域木を作って、そのクエリの辺が追加されるのと最小全域木上でクエリの辺が結ぶ頂点がつながるの、どっちが先かな〜をしようとしたが、これだと3個以上の頂点を含むサイクルで他に辺がない場合のケースを考えられないので、全ての頂点から最小全域木をする必要になり?になるので、
クエリをまとめて重み順にしてから処理する。この処理の連結判定はUnionFindでする。で上手くいくらしい(クエリをまとめて処理、あまりやったことなかったから意識したい)
(追記):元々やりたかった解法がkyopro_friendsさんが書いてくれてたダブリング的なのでできるっぽいので調べてみると、アルゴリズムロジックというサイトが書いてくれてた、どちらもありがたい〜〜。
https://atcoder.jp/contests/abc235/editorial/3258