品目の料理を1日目の方が美味しかった2日目の方が美味しかった同じくらい美味しかったのいずれかで評価した。このとき、グルメの評価に矛盾しないように各料理に正整数のスコアを割り振ることができるか。できるならば、スコアの最大値が最小になるような割り振りを出力せよ。解説まず評価が同じ料理はスコアも同じでならなくてはならないので、UnionFind木でそれらを連結する。このとき、評価が同じでないのに同じグループになっているものがいないか確認する。してグループ分けされた料理群に対して、今度は「美味しさ」が大きい方から小さい方へ有向辺が張られた有向グラフを作る。このグラフに閉路が存在する場合は、どうスコアを振っても閉路内で矛盾が起こるのでアウトとなる。ない場合、グラフはDAGとなるので矛盾なくスコアが割り振れる。スコアの最大値を最小化しなければならないが、これは「子に割り振られたスコアの最大値+1」(葉のスコアは1)と振るのが最適となる。実装例...と解法は一直線なのだが、本当に怠い難しいのは実装である。複数の頂点をひとまとめにしたグラフを扱う機会はあまりないので、どう実装すればいいのか非常に悩んだ。人々の実装を色々見たが、結局「UnionFindの根を代表元として扱う」というアルメリアさんの実装が一番腑に落ちた。本番でこういう実装がしたいものである。0;}感想こういう実装ゲーは精神的にしんどい。強連結成分分解の実装とかも練習すべきだろうか。※各問題名は表記ミスではありません。「Candles」の解説。「Attention」の解説。部分永続Union-Findはいいぞ。公式はてなブログをはじめよう!misteerさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。