AtCoder Regular Contest 142 C問題 Tree Queries
問題
提出解答
問題の概要
インタラクティブ問題 頂点からなる木 がある. 以下の質問を高々 回することにより, を求めよ.
- となる に対して, を尋ねる.
制約
- は最初に決定される.
解法
定理1
である.
グラフ に対して, で ならば,
この定理1を利用して を求めることにする. 回分を使って,
を尋ねる.
このとき,
を解答として使いたいが, そのまま解答にしてしまうと不正解になってしまう場合がある. これは定理1 が辺 が存在しないことを仮定しているからである.
そこで, 辺 がある場合に がどのような値になるかを観察する. 実は, この場合, で は木なので, 必ず となる. よって, この対偶を取って, ならば, 辺 は に存在しないことになる. これで の場合は であることがわかった.
よって, の場合を考えることになる. このとき, の候補は または である. 今, は木なので, 以下が従う.
定理2
木 において, は であるとする. このとき, を満たす はちょうど 個である.
という仮定のもとで, もし, となる頂点 の個数がちょうど 個ではなかったとすると, 定理2から であるから, である.
かつ であるような頂点 の個数がちょうど 個のとき, その2つの頂点を とする. このとき, は であるから, 頂点 または頂点 のうちどちらか一方のみと隣接している.
- が共に頂点 と隣接している (または共に頂点 に隣接している場合): である. また, この場合, なので, 頂点 と頂点 には共通の近傍 が存在する. 仮定すると, であり, の名付け方から, でなくてはならない. しかし, これだと木に を頂点とするサイクルが存在することになり矛盾する. よって, であるから, 辺 が存在する.
- の一方は頂点 と隣接し, 他方は頂点 と隣接している場合: 対称性から, 頂点 は頂点 と, 頂点 は頂点 と隣接しているとする. このとき, には辺 と辺 が存在する. このとき, である.
- 辺 が存在するならば, は パスとなり, は木なので, である.
- 辺 が存在しない場合. もし, 辺 が存在しないと仮定すると, 辺 と辺 は存在しないので, 頂点 , 頂点 とは異なる新たな頂点 で が頂点 と頂点 の共通近傍になるようなものが存在する. しかし, 辺 が存在しないことに注意すると, でとなるが, これは であるような頂点 の個数がちょうど 個であり, それを と名付けたことに矛盾する. 従って, 辺 が存在するので, である.
従って, 転換法を利用することにより,
- 辺 が存在する である.
- 辺 が存在する である.
- 辺 が存在しない である.
と結論づけることができる. よって, を尋ねることによって を特定できる.
以上から, 高々 回で を特定できた.
解法の概略
- それぞれに対して, を尋ねる.
- としたとき, ならば である.
- のとき, となる頂点 の個数がちょうど2個でなければ, である.
- かつ となる頂点 の個数がちょうど2個のとき, その2個の頂点を としたとき, を訪ね, ならば , そうでなければ, である.