人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 209 [ D - Collision ]をPythonで解く(400点、🟫茶diff)

問題

atcoder.jp

解法

街がN、経路がN-1であることから木構造であることがわかる。 木構造の頂点間の最短距離が奇数なら道で。
偶数なら街で出会う。

最短距離の偶奇を求めるために、各頂点の深さを計算。
深さから、頂点間の距離がわかる。
途中に共通の祖先(LCA)があったとしても距離の偶奇には関連しない。

c, d間の最短距離は
dep[c] + dep[d] - dep[lca] * 2
となる。
lcaは2倍されているので常に偶数。
ゆえに答えに関連しない。

実装

参考

youtu.be