AtCoder Beginner Contest 126 D - Even Relation
考えたこと:
・二点間についてすべて考えてしまうとO(N^2)で間に合わなくなる。
・距離の偶奇しか問われていないので、距離の大きさは本質ではない。
・こういう問題は根付き木にして、根を起点にして考えるとよいことが多い。
図を書いてじっと眺めてみると・・・
赤ー>青の距離は、赤ー>Y->X->Y->青の距離からX->Yを二回引いた距離
(上図黄色線)に等しい。
ここで、距離の偶奇しか本質でないことを思い出すと、往復しているX->Yの距離は必ず偶数になるため考えなくてもよい。(逆に言うと付け足して考えても良い)
よって、二点間の距離の偶奇は、二点間への根からの距離の和の偶奇に等しいことが示せた。
根からの各頂点の距離はDFSすることでO(N+M)で求められる。
よって、
根からの距離が偶数の場合、0グループに
根からの距離が奇数の場合、1グループに
というふうに塗ってあげれば、題意を満たすことが出来る。
実装:
グラフが木で、二往復することで辺上のなんらかを無視できるような問題では、根を考えることで上記のような処理が出来ることがよくあるように思う。