Citiesこの手の実装が重い問題を解くのにかなりの困難を感じる。https://codeforces.com/contest/1062/problem/F問題サイクルのないn頂点m辺の有向グラフ(DAG)が与えられる。以下の条件を満たす頂点vを重要な頂点と呼ぶ:任意の頂点wに対して、vからwへの道かwからvへの道が存在する。以下の条件を満たす頂点vを準重要な頂点と呼ぶ:与えられたグラフからv以外のある頂点一つを取り除いて、vが重要な頂点になるようにできる。与えられたグラフの重要な頂点と準重要な頂点の個数の合計を求めよ。vが成立していることを仮定してよい。頂点iについて明らかなこととして、頂点iへ到達可能なのはiよりも小さい番号の頂点に限られ、頂点iから到達可能なのはiよりも大きい番号の頂点に限られる。これらは対称的なので、片方だけ考えればよい。適当な1点を取り除いた時に頂点iへ到達不可能な頂点がないようにできるかどうか)がわかれば全てが解決する。頂点iへ到達不可能な頂点があるかどうかについては、i以下の番号の頂点だけ見たとき出次数0の頂点がi以外にあるかどうかを判定すれば良い。m)時間で計算できる。適当な1点を取り除いた時に頂点iへ到達不可能な頂点がないようにできるかどうかは少し難しい。i以下の番号の頂点だけ見たときに、出次数0の頂点が2個以上であれば不可能であり、0個なら可能である。x)があるようなすべての頂点wについて、xがなくなった時の出次数が0以外、つまり元々の出次数が2以上であればよい。これもデータ構造をうまく設計すればでき、各頂点vについて「vへの辺がある頂点の中で次数1のものが何個あるか」を管理すればよい。m)時間で各頂点についての判定が行える。koba-e964の日記にも通じるものがある気がする。今回は自力で解けたので嬉しかった。してしまい実装に1.5時間近く掛かったのは反省。Charactersさすがにこれが解けないのは反省。Snacks?)月別アーカイブはてなブログをはじめよう!koba-e964さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。