だいたい競プロこの広告は、90日以上更新していないブログに表示しています。excludeに由来)と呼ばれている。Wikipedia区間に対するmexを求める問題を見かけたので備忘録として書いておく。問題はじめ、集合Sは空集合であるとする。Q個のクエリが与えられ、各クエリは以下の3つの形式のいずれかである。r]である整数xのうち、集合Sに含まれない最小のxを出力する与えられたQ個のクエリを順に処理せよ。r]である整数のうち集合Sに含まれないものが必ず存在する。(ありがとう2017F問題の想定解じゃないのを書きます)」でした。AtCoder解法ほぼ解説の解法1とほぼいっしょなので、その解法を思いついた流れを整理しておく。b'をa'に繋ぐ図にすると、以下のようになる各操作でa'とb'の間に枝を張って木を作っておき、さらに繋げた側がいつ繋げたかを覚えておく。yについてのクエリを考える。行うと、下の図のようにオレンジの頂点を求めることができる*2。知りたいのは、下の図の緑の頂点が何回目の操作でオレンジの頂点と繋がったかである。ここで、木の頂点vの深さをdepth[v]とする*3。する)のいずれかである。どちらが緑の頂点になるかが問題である。うち、緑の頂点ではない方の頂点を赤の頂点とする(下図参照)。両方求めておいて、それらがオレンジの頂点と何回目の操作で繋がったかについて求めて、その大きい方を答えればよい。これはUnion-Findで木を作る途中で記憶してあるので、容易に答えられる。LCAという解法自体は割とすぐに求まったけど、LCAのライブラリがバグっており、散々だった。ライブラリをちゃんと整備しておくことは大事。人生最後のこどふぇす*4でパーカーを逃したため、非常に辛かった。さんで「何か書く」です。何が書かれるのか楽しみですね。無向フローが与えられるので頂点1からNへの最大フローを求めよ。枝の重みがxの多項式で与えられるものとする。yukicoder8月後半〜9月末まではインターンとかで忙しくて中々書けなかったが、そろそろCodeFestival2016本戦に向けて再開していきたい。topcoder寝坊したので出れなかった。問題50個の頂点とM個の枝を持つグラフ(単純グラフとは限らない)が与えられる。初め、各頂点は全て塗りつぶされていないとする。毎回、どこか1つの頂点を塗りつぶした後に、枝の両端の頂点がともに塗りつぶされている枝の数だけコストを支払う。支払うコストの合計が最小になるような順番で頂点を塗りつぶしたときのコストを求めよ。officialだと230位くらいでレートが下がりそうな順位だった。N)で走ることができる。b)に最も速く着くタクシーの着く時間を求めよ。m_Qが与えられるので、各m_iで買える商品の種類数を答えよ。取ったときのインデックスが答えとなる。problem問題N個の文字列が与えられ、各文字列を逆順にするためのコストc_iが与えられる。幾つかの文字列を逆順にして、文字列を先頭から辞書順になるようにするとき、逆順にするコストの合計を最小化せよ。どのように逆順にしても辞書順にならない場合は-1を出力せよ。(i+1番目の逆順の文字列))とする(片方しか逆順になっていない場合はそちらだけで更新する。初め、multisetには0が1つ入っている。xとmultisetの要素yの中で、x^yが最大になるものを出力する、という3種類のクエリがQ個与えられるので処理せよ。解法xとXORを取ったときに、上位bitを立てるようなものがmultisetに入っている場合は、下位ビットがどうなろうとそれを取った方がいいということが分かる。よって、上位からビットを立てるか決めていく二分探索を行う。