Codeforces Round #550 (Div. 3)F. Graph Without Long Directed Paths

問題概要

無向単純連結グラフ G が与えられます. G の辺に向きをつけて G を有向グラフにするが, このとき G のすべてのパスの長さが 1 になるようにしたいです. このように向きをつけることは可能ですか?可能なら構成の一例を示してください. 

問題へのリンク

制約

  •  1 \le N \le 2\times 10^5
  •  N-1 \le M \le 2\times 10^5

解法

もし G が二部グラフなら, 必ず赤から青に向けて向きをつければ構成できることは明らかです. では二部グラフではないときはどうでしょうか?

G が二部グラフでないときは, G は必ず一つ以上の奇サイクルを含みます. 奇サイクルは, どうやっても条件を満たすように構成できません(実験してみてください).

よって,  まず G を二部グラフ判定し, 二部グラフなら前述のように構築すればよく, 二部グラフでないなら No とすればよいです.

実装

二部グラフ判定は Union-Find をつかうと楽らしいです(実装では使っていません).

Submission #145192938 - Codeforces