AtCoder Beginner Contest 231 D 問題 Neighbors
問題
提出解答
問題の概要
の並び替えで, 以下の 個の条件を全て満たすような並び替えは存在するか?
- と は隣接している.
制約
- 入力はすべて整数
解法
条件を満たすような並び替えが存在することと, 以下は同値である.
無向グラフ を としたとき, の各連結成分は孤立点または長さ 以上のパスである.
証明\ グラフ が以下を満たすとする. のパスになっている連結成分の個数を , 孤立点の個数を とする. パスになっている連結成分を とし, 連結成分 はパスとみなして, の順であるとする. また, 孤立点を とする. このとき,
は条件を満たす の並び替えである. 実際, 上において, はちょうど1回ずつ現れる. また, 任意の辺 は必ず何かしらのパスを構成のために使われているから, 条件も満たす.
逆に, 条件を満たすような並び替え が存在するとする. グラフ を
とする. このとき, は長さ のパスである. よって, は の部分グラフなので, 各連結成分は孤立点または長さ 以上のパスである.
よって, 言い換えたグラフにおいて, 各連結成分が孤立点か, 長さ 以上のパスかどうかを判定することで存在するかどうかを見ることができる.
ここで, 連結成分が孤立点であることと, 頂点数 であることが同値であり, 連結成分が長さ 以上のパスであることと, 以下をすべて満たすことが同値である.
- 頂点数 以上
- 各頂点の次数が 以下
- 次数 の頂点が存在する.
連結成分を調べる方法として, BFS や DFS, Union-Find を利用することにより, 計算量 で求めることができる.