E]競技プログラミングhttps://atcoder.jp/contests/joi2017yo/tasks/joi2017yo_e解説https://atcoder.jp/contests/joi2017yo/submissions/8141535まず、順当に考えると、座標を全探索して、シミュレーションをして、その座標が尾根であるかを判定する。どのようにシミュレーションするかであるが、雨水が通過するというのは、その座標から到達可能であるとも言える。して、雨水が溜まる部分に複数箇所到達可能なら尾根である。これをやるとO(H2W2)なので厳しい。ありがちな方針ではあるが、始点は尾根であるかは事前に分からないが、終点が溜まる場所であることは事前にわかる。溜まる場所を始点として考えてみると考えやすいのではないか。幅優先探索を逆に行ってみる。標高が低い所から高い所へ逆流させよう。このときに、どの溜まる場所から逆流してきたかを保存しておこう。3つ以上の場所から逆流してきた場合は、尾根判別をしたいだけなので、2つだけ保持しておけばいい。これで、全ての場所について、溜まる場所について特定ができるので、2つ以上溜まる場所があるなら尾根として計上する。幅優先するときは、逆順にやるのが面倒なので、全て異なる数であることを利用して、小さい数から順番に操作を行えばいい。B]月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。