mini notes

競技プログラミングの解法メモを残していきます。

第一回日本最強プログラマー学生選手権-予選- D - Classified (600)

問題:D - Classified

解答:Submission #14684809 - Japanese Student Championship 2019 Qualification

解法:同じ頂点に戻るときの経路長が偶数のみ⇒奇数長のサイクルを持たない⇒2部グラフ、ということで完全グラフを2部グラフに分けてゆく。

例:N=7
①{1, 2, 3, 4, 5, 6, 7} ⇒ A={1, 3, 5, 7}とB={2, 4, 6} に分割し、Aの中から1つ、Bの中から1つずつそれぞれ頂点を選び、その頂点間に辺を張る。これを全ての頂点の組み合わせで行う。
②{1, 3, 5, 7} ⇒ A= {1, 5}とB={3, 7}に分割し、同様に辺を張る。
③{2, 4, 6} ⇒ A= {2, 6}とB={4}に分割し、同様に辺を張る。
④{1, 5} ⇒ A= {1}とB={5}に分割し、同様に辺を張る。
⑤{3, 7} ⇒ A= {3}とB={7}に分割し、同様に辺を張る。
⑥{2, 6} ⇒ A= {2}とB={6}に分割し、同様に辺を張る。

張る辺のレベルだが、①は1、②③は2、④⑤⑥は3とすると最小になる。これはdfsで頂点集合を分割していった時の深さに相当する。