Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 244 G問題 Construct Good Path

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

 N 頂点  M 辺の単純無向連結グラフ  G=(V=[\![N]\!], E=\{u_j v_j \mid j=1,2, \dots, M\}) 0,1 からなる長さ  N の列  S が与えられる.

以下を満たすような  P=(P_1, \dots, P_K) を1つ例示せよ.

  •  1 \leq P_i \leq N
  •  P_i P_{i+1} \in E
  •  S_i=0 ならば,  P_1, \dots, P_k の中に  i が偶数回登場する.
  •  S_i=1 ならば,  P_1, \dots, P_k の中に  i が奇数回登場する.
  •  0 \leq K \leq 4N

ただし, 上の条件を満たす  P は必ず存在する.

制約

  •  2 \leq N \leq 10^5
  •  N-1 \leq M \leq \min(2 \times 10^5, \frac{N(N-1)}{2})
  • 1 \leq u_i,v_i \leq N
  •  G は単純無向連結グラフ

解法

適当な頂点  r \in V を根とする  G の全域部分木  T をとる. また,  T の Euler Tour  W

 r=W_0, W_1, W_2, \dots, W_{2N-2}=r

とする.

このとき, 以下のようにして, 条件を満たす  P を構成できる.

  •  P \gets \emptyset
  •  P の末尾に  r を加える.
  •  i=1,2, \dots, 2N-2 の順に以下を行う.
    •  P の末尾に  W_i を加える.
    •  i \neq 2N-2 で,  W_i W_{i-1} の親であり, この時点で  P に登場する  W_{i-1} の個数の偶奇が要求と一致していなかったら,  P の末尾に  W_{i-1}, W_i の2つを加える.
  • ここまでで  W_{2N-3}, W_{2N-2} 以外の全ての頂点についての偶奇は要求に沿うことができている. そこで,  W_{2N-3}, W_{2N-2} の偶奇の状況において場合分けする.
    •  W_{2N-3}, W_{2N-2} における偶奇がともに一致しているならば, 何もしない.
    •  W_{2N-3} における偶奇は一致していないが,  W_{2N-2} における偶奇は一致しているならば,  P の末尾に  W_{2N-3} を加える.
    •  W_{2N-3} における偶奇は一致しているが,  W_{2N-2} における偶奇は一致していないとき,  P の末尾に  W_{2N-3}, W_{2N-2}, W_{2N-3} を加える.
    •  W_{2N-3}, W_{2N-2} における偶奇がともに一致していないならば,  P の末尾に  W_{2N-3}, W_{2N-2} を加える.

このようにして構成された  P は登場回数の偶奇の要求を全て満たす.

また,  P の長さについて, 辺  W_{2N-3} W_{2N-2} 以外は全て高々  4 回ずつ通る. 辺  W_{2N-3} W_{2N-2} も高々  5 回通る.

よって,  K \leq 1+4(N-2)+5=4N-3 であるから, 全ての条件を満たす.