AGC050-Bを解いた
問題
重み付きの木(辺が結んでいるのは頂点と、重みは)が与えられる。どれか一つ辺を選んでその辺と頂点を一つ共有するすべての辺について重みを選んだ辺の重みとの排他的論理和に置き換える。目標の重み()を達成するのは可能か?
解法
辺に対する操作は扱いにくいので各頂点に数(、最初は全部)が書いてあるとしてみて、辺の重みをとして表す。すると、辺に対する操作は「とをswapし、それぞれをとの排他的論理和に置き換える」と言い換えられる。ここで最終的にすべての ()についてを満たす必要があり、の総xorが常にであることと併せて考えれば最終的な (と置く)は一意に定まる(ここでが奇数であることが役立つ)。
さて、 入力で与えられた木についての 間の辺の重みの総xorと定める。ここで、もともと頂点にあった値が頂点に移ったことを考えるとこの値はであり、これをに一致させる必要がある。また、より、
数列が
数列の並べ替えであるかどうかを判定すればよい。
考察
辺は扱いにくいので頂点でうまくできないか考える->変化を見る
不変量を見つける