注意
本記事では Shortest Balanced Walk の問題文および公式解説の内容を前提としています.
定義,概要
入力されたグラフ上のウォークに対し,そのウォークが通った辺に書かれた文字を通過順に並べてできる括弧列のことを,そのウォークに対応する括弧列と呼びます.
括弧列の ネスト を,その括弧列に含まれる ( の個数から ) の個数を引いた値とします.
括弧列の 最高ネスト ,最低ネスト を,その括弧列の接頭辞のネストの最大値,最小値とします.
ウォークに対応する括弧列のネスト,最高ネスト,最低ネストをそれぞれ単にウォークのネスト,最高ネスト,最低ネストと呼びます.
良いウォーク を問題文の通りに定めます.
上の用語を用いれば,頂点 1 1 1 から頂点 N N N へのウォークであって,そのネストおよび最低ネストが 0 0 0 であるものといえます.
明らかに良いウォークの長さは偶数です.
ウォーク W W W の長さを W W W が通った辺の本数とし,∣ W ∣ |W| ∣ W ∣ で表します.
本記事では次の解法を扱います(公式解説に倣って 解法 2 と呼びます).
解法 2
d p v , s \mathrm{dp} _ {v, s} dp v , s を,頂点 1 1 1 から頂点 v v v へのウォークであって,対応する括弧列のネストが s s s であるようなものの長さの最小値と定める.
この DP テーブルを初期値 d p 1 , 0 = 0 \mathrm{dp} _ {1, 0} = 0 dp 1 , 0 = 0 から BFS の要領で埋めていくと,d p N , 0 \mathrm{dp} _ {N, 0} dp N , 0 が答えである.
ただしネスト s s s は 0 ≤ s ≤ S 0 \le s \le S 0 ≤ s ≤ S の範囲に限って考えるものとし,途中でネストがこの範囲から外れる遷移は無視する.計算量は O ( S M ) O(SM) O ( S M ) 時間である.
特に S S S をどのような値に設定すれば正当な解法になるかに注目します.例えば公式解説では S = N − 2 S = N - 2 S = N − 2 とすれば AC を得られることが紹介されています.
この解法 2 に関して,本記事では次の2点を証明します.
解法 2 で S = N − 2 S = N - 2 S = N − 2 とするのは正当ではない.
解法 2 で S = 2 N − 1 S = 2N - 1 S = 2 N − 1 とすれば正当である.
また有向グラフが与えられる場合についても述べます.
S = N − 2 S = N - 2 S = N − 2 は正当ではない(不十分である)
5 ≤ N ≤ 200 5 \le N \le 200 5 ≤ N ≤ 200 に対し,次のケースで S ≥ 2 N − 6 S \ge 2 N - 6 S ≥ 2 N − 6 が必要です.
頂点 2 , 1 , N , N − 1 , … , 6 , 5 2, 1, N, N-1, \dots, 6, 5 2 , 1 , N , N − 1 , … , 6 , 5 からなるパスと,頂点 5 , 4 , 3 5, 4, 3 5 , 4 , 3 からなる 3 3 3 -サイクルを合わせたグラフで,2 2 2 –1 1 1 辺にのみ ( が書かれています.
証明
良いウォークの長さは偶数ですが 1 1 1 –N N N 間の最短距離は奇数(1 1 1 )なので,偶奇を合わせるためには少なくとも 3 3 3 -サイクルを 1 1 1 周する必要があります.偶数長の最短の 1 1 1 –N N N ウォークは
1 → N → N − 1 → ⋯ → 6 → 5 → 4 → 3 → 5 → 6 → ⋯ → N − 1 → N \begin{aligned}
1& \to N \\
& \to N-1 \to \dots \to 6 \to 5 \\
& \to 4 \to 3 \to 5 \\
& \to 6 \to \dots \to N - 1 \to N
\end{aligned}
1 → N → N − 1 → ⋯ → 6 → 5 → 4 → 3 → 5 → 6 → ⋯ → N − 1 → N
です.このウォークのネストは − ( 2 N − 6 ) -(2 N - 6) − ( 2 N − 6 ) なので,良いウォークにするため先頭に 1 1 1 –2 2 2 間の N − 3 N-3 N − 3 往復を加えたウォーク
1 ( → 2 → 1 ) N − 3 → N → N − 1 → ⋯ → 6 → 5 → 4 → 3 → 5 → 6 → ⋯ → N − 1 → N \begin{aligned}
1& (\to 2 \to 1)^{N-3} \to N \\
& \to N-1 \to \dots \to 6 \to 5 \\
& \to 4 \to 3 \to 5 \\
& \to 6 \to \dots \to N - 1 \to N
\end{aligned}
1 ( → 2 → 1 ) N − 3 → N → N − 1 → ⋯ → 6 → 5 → 4 → 3 → 5 → 6 → ⋯ → N − 1 → N
が最短の良いウォークです.このウォークは 3 3 3 -サイクルを通る向きの違いを除いて唯一であり,最高ネストは 2 N − 6 2 N - 6 2 N − 6 なので,S ≥ 2 N − 6 S \ge 2 N - 6 S ≥ 2 N − 6 が必要です.□ \square □
S = 2 N − 1 S = 2N - 1 S = 2 N − 1 は正当である(十分である)
制約を満たす任意の入力において,実際に良いウォークが存在するならば,任意の最短の良いウォークに対し,その最高ネストは 2 N − 1 2 N - 1 2 N − 1 以下であることを示します.
証明
制約を満たし,かつ良いウォークが存在する任意の単純連結無向グラフ G G G を取ります.このとき,次が成り立ちます.
頂点 1 1 1 に接続する ( が書かれた辺が存在する(この辺を e 1 e_1 e 1 とする)
頂点 N N N に接続する ) が書かれた辺が存在する(この辺を e N e_N e N とする)
さて,G G G を元に二部グラフ G ′ G' G ′ を次の通り構成します.
頂点集合:{ ( v , 0 ) ∣ 1 ≤ v ≤ N } ∪ { ( v , 1 ) ∣ 1 ≤ v ≤ N } \lbrace \, (v, 0) \, | \, 1 \le v \le N \, \rbrace \cup \lbrace \, (v, 1) \, | \, 1 \le v \le N \, \rbrace { ( v , 0 ) ∣ 1 ≤ v ≤ N } ∪ { ( v , 1 ) ∣ 1 ≤ v ≤ N }
辺集合:{ { ( u i , 0 ) , ( v i , 1 ) } ∣ 1 ≤ i ≤ M } ∪ { { ( u i , 1 ) , ( v i , 0 ) } ∣ 1 ≤ i ≤ M } \lbrace \, \lbrace (u_i, 0), (v_i, 1) \rbrace \, | \, 1 \le i \le M \, \rbrace \cup \lbrace \, \lbrace (u_i, 1), (v_i, 0) \rbrace \, | \, 1 \le i \le M \, \rbrace { {( u i , 0 ) , ( v i , 1 )} ∣ 1 ≤ i ≤ M } ∪ { {( u i , 1 ) , ( v i , 0 )} ∣ 1 ≤ i ≤ M }
仮定から G ′ G' G ′ 上の頂点 ( 1 , 0 ) (1, 0) ( 1 , 0 ) から頂点 ( N , 0 ) (N, 0) ( N , 0 ) への最短 パス P ′ P' P ′ を取ることができます.P ′ P' P ′ の長さはパスなので 2 N − 1 2 N - 1 2 N − 1 以下で,さらに偶数なので 2 N − 2 2 N - 2 2 N − 2 以下です.
P ′ P' P ′ が通った頂点の第 1 1 1 成分を順に並べると,G G G 上の偶数長のウォーク P P P を得ます.P P P の長さも 2 N − 2 2 N - 2 2 N − 2 以下です.
P P P のネストを p p p ,最低ネストを m m m とします.P P P の先頭に辺 e 1 e_1 e 1 での往復を ⌈ − m / 2 ⌉ \lceil -m / 2 \rceil ⌈ − m /2 ⌉ 回(m ≤ 0 m \le 0 m ≤ 0 に注意)追加すれば最低ネストを 0 0 0 にでき,さらに P P P の末尾に辺 e N e_N e N での往復を p / 2 + ⌈ − m / 2 ⌉ p/2 + \lceil -m / 2 \rceil p /2 + ⌈ − m /2 ⌉ 回追加すれば全体のネストを 0 0 0 にできます.こうして得られる良いウォークを W W W とします.すると,
∣ W ∣ = ∣ P ∣ + 2 ⌈ − m 2 ⌉ + 2 ( p 2 + ⌈ − m 2 ⌉ ) = ∣ P ∣ + 4 ⌈ − m 2 ⌉ + p |W| = |P| + 2 \left\lceil \frac{-m}{2} \right\rceil + 2 \left( \frac{p}{2} + \left\lceil \frac{-m}{2} \right\rceil \right)
= |P| + 4 \left\lceil \frac{-m}{2} \right\rceil + p
∣ W ∣ = ∣ P ∣ + 2 ⌈ 2 − m ⌉ + 2 ( 2 p + ⌈ 2 − m ⌉ ) = ∣ P ∣ + 4 ⌈ 2 − m ⌉ + p
です.ここで
∣ P ∣ ≥ ∣ 0 − m ∣ + ∣ m − p ∣ = − 2 m + p (1) |P| \ge |0 - m| + |m - p| = -2 m + p \tag{1}
∣ P ∣ ≥ ∣0 − m ∣ + ∣ m − p ∣ = − 2 m + p ( 1 )
および ∣ P ∣ ≤ 2 N − 2 |P| \le 2 N - 2 ∣ P ∣ ≤ 2 N − 2 より
∣ W ∣ = ∣ P ∣ + 4 ⌈ − m 2 ⌉ + p ≤ ∣ P ∣ + 4 ( − m + 1 2 ) + p = ∣ P ∣ − 2 m + p + 2 ≤ 2 ∣ P ∣ + 2 ≤ 4 N − 2. (2) \begin{aligned}
|W|
&= |P| + 4 \left\lceil \frac{-m}{2} \right\rceil + p \\
&\le |P| + 4 \left( \frac{-m + 1}{2} \right) + p \\
&= |P| - 2 m + p + 2 \\
&\le 2|P| + 2 \\
&\le 4N - 2. \\
\end{aligned} \tag{2}
∣ W ∣ = ∣ P ∣ + 4 ⌈ 2 − m ⌉ + p ≤ ∣ P ∣ + 4 ( 2 − m + 1 ) + p = ∣ P ∣ − 2 m + p + 2 ≤ 2∣ P ∣ + 2 ≤ 4 N − 2. ( 2 )
以上で長さが 4 N − 2 4 N - 2 4 N − 2 以下の良いウォークが存在することが示せました.
最短の良いウォーク W ⋆ W^\star W ⋆ を任意に取ります.∣ W ⋆ ∣ ≤ ∣ W ∣ ≤ 4 N − 2 |W^\star| \le |W| \le 4N-2 ∣ W ⋆ ∣ ≤ ∣ W ∣ ≤ 4 N − 2 であり,W ⋆ W^\star W ⋆ の最高ネストは ∣ W ⋆ ∣ / 2 |W^\star|/2 ∣ W ⋆ ∣/2 以下なので,2 N − 1 2 N - 1 2 N − 1 以下であることが示されました.□ \square □
なお,より詳細な観察により S = 2 N − 2 S = 2 N - 2 S = 2 N − 2 で十分である(S ≥ 2 N − 1 S \ge 2 N - 1 S ≥ 2 N − 1 が必要となることはない)ことを示すこともできます.
証明
記号等は上の証明ブロックから引き継ぎます.
N = 2 N = 2 N = 2 の場合は G G G が単純なので良いウォークが存在しません.以下 N ≥ 3 N \ge 3 N ≥ 3 とします.
∣ W ∣ = 4 N − 2 |W| = 4 N - 2 ∣ W ∣ = 4 N − 2 になったと仮定すると,式 ( 2 ) (2) ( 2 ) の一連の不等号が全て等号となります.つまり,
m m m は奇数
∣ P ∣ = p − 2 m |P| = p - 2 m ∣ P ∣ = p − 2 m
∣ P ∣ = 2 N − 2 |P| = 2N - 2 ∣ P ∣ = 2 N − 2
が全て成り立ちます.
∣ P ′ ∣ = 2 N − 2 |P'| = 2N - 2 ∣ P ′ ∣ = 2 N − 2 より P ′ P' P ′ が通らない G ′ G' G ′ の頂点はちょうど 1 1 1 つです.さらにそれは ( v , 1 ) (v, 1) ( v , 1 ) たちのうちのいずれかです.
ところで G G G の辺 e 1 = { 1 , a } e_1 = \lbrace 1, a \rbrace e 1 = { 1 , a } に対応して G ′ G' G ′ に辺 e 1 ′ = { ( 1 , 0 ) , ( a , 1 ) } e_1' = \lbrace (1, 0), (a, 1) \rbrace e 1 ′ = {( 1 , 0 ) , ( a , 1 )} があります.もし ( a , 1 ) (a, 1) ( a , 1 ) が P ′ P' P ′ 上にあるならば,P ′ P' P ′ は最短パスなので辺 e 1 ′ e_1' e 1 ′ を含み,P ′ P' P ′ において ( 1 , 0 ) (1, 0) ( 1 , 0 ) の直後に来ます.
同様に,G G G の辺 e N = { b , N } e_N = \lbrace b, N \rbrace e N = { b , N } に対応して G ′ G' G ′ に辺 e N ′ = { ( b , 1 ) , ( N , 0 ) } e_N' = \lbrace (b, 1), (N, 0) \rbrace e N ′ = {( b , 1 ) , ( N , 0 )} があり,もし ( b , 1 ) (b, 1) ( b , 1 ) が P ′ P' P ′ 上にあるならば,P ′ P' P ′ において ( N , 0 ) (N, 0) ( N , 0 ) の直前に来ます.
以上より P ′ P' P ′ は頂点 ( a , 1 ) , ( b , 1 ) (a, 1), (b, 1) ( a , 1 ) , ( b , 1 ) の少なくとも片方を通ります.なぜなら,もし P ′ P' P ′ が頂点 ( a , 1 ) , ( b , 1 ) (a, 1), (b, 1) ( a , 1 ) , ( b , 1 ) をともに通らないとすると a = b a = b a = b ですが,すると辺 e 1 ′ , e N ′ e_1', e_N' e 1 ′ , e N ′ を通ることで頂点 ( 1 , 0 ) (1, 0) ( 1 , 0 ) から頂点 ( N , 0 ) (N, 0) ( N , 0 ) への長さ 2 2 2 のパスが存在することになり,P ′ P' P ′ の最短性に矛盾するからです.
すなわち P P P に対応する括弧列は,先頭が ( であるか,または末尾が ) です.
一方 ∣ P ∣ = p − 2 m |P| = p - 2 m ∣ P ∣ = p − 2 m とは式 ( 1 ) (1) ( 1 ) の等号が成立するということなので,P P P に対応する括弧列は
) ⋯ ) ⏟ − m ( ⋯ ( ⏟ p − m \underbrace{\texttt{)} \dotsb \texttt{)}}_{-m} \underbrace{\texttt{(} \dotsb \texttt{(}}_{p - m}
− m ) ⋯ ) p − m ( ⋯ (
となります.ここで m m m は奇数,p p p は偶数なので ) も ( も 1 1 1 個以上あります.よってこれは上に矛盾します.
したがって ∣ W ∣ = 4 N − 2 |W| = 4 N - 2 ∣ W ∣ = 4 N − 2 にはなり得ず,∣ W ∣ |W| ∣ W ∣ は偶数なので ∣ W ∣ ≤ 4 N − 4 |W| \le 4 N - 4 ∣ W ∣ ≤ 4 N − 4 です.以降は先と同様にして,最短の良いウォークの最高ネストが 2 N − 2 2 N - 2 2 N − 2 以下といえます.□ \square □
(余談)有向グラフが与えられる場合
ここでは次のような入力制約を考えています.
入力の ( u i , v i , c i ) (u_i, v_i, c_i) ( u i , v i , c i ) は c i c_i c i が書かれた u i u_i u i から v i v_i v i への有向辺を表す
u i , v i ∈ [ 1 , N ] u_i, v_i \in [1, N] u i , v i ∈ [ 1 , N ]
u i ≠ v i u_i \ne v_i u i = v i
i ≠ j → ( u i , v i ) ≠ ( u j , v j ) i \ne j \to (u_i, v_i) \ne (u_j, v_j) i = j → ( u i , v i ) = ( u j , v j )
1 1 1 から N N N へ到達可能である
必要性
k ≥ 3 , N = 2 k + 1 k \ge 3, N = 2k + 1 k ≥ 3 , N = 2 k + 1 として,次のケースは S ≥ k ( k + 1 ) = ( N 2 − 1 ) / 4 S \ge k(k + 1) = (N^2-1)/4 S ≥ k ( k + 1 ) = ( N 2 − 1 ) /4 が必要です.
つまり頂点 1 , 2 , … , k 1, 2, \dots, k 1 , 2 , … , k からなる k k k -サイクル,頂点 k + 1 , k + 2 , … , N k+1, k+2, \dots, N k + 1 , k + 2 , … , N からなる ( k + 1 ) (k+1) ( k + 1 ) -サイクル,頂点 1 1 1 から頂点 k + 1 k+1 k + 1 への辺(辺 e e e とする)からなるものです.
証明
良いウォークは k k k -サイクルを x x x 周し,辺 e e e を辿り,( k + 1 ) (k+1) ( k + 1 ) -サイクルに沿って頂点 N N N に行き,さらに ( k + 1 ) (k+1) ( k + 1 ) -サイクルを y y y 周するという形に限られます.ここで x = 0 x = 0 x = 0 では括弧列が ) から始まってしまうので x ≥ 1 x \ge 1 x ≥ 1 です.このとき最低ネストは自動的に 0 0 0 になるので,良いウォークであるための条件は
k x = 1 + k + ( k + 1 ) y kx = 1 + k + (k+1)y
k x = 1 + k + ( k + 1 ) y
です.この方程式の整数解は
( x , y ) = ( ( k + 1 ) i , k i − 1 ) ( i ∈ Z ) (x, y) = ((k + 1)i, ki - 1) \quad (i \in \mathbb{Z})
( x , y ) = (( k + 1 ) i , k i − 1 ) ( i ∈ Z )
で,特に x ≥ 1 , y ≥ 0 x \ge 1, y \ge 0 x ≥ 1 , y ≥ 0 における最小の解は
( x , y ) = ( k + 1 , k − 1 ) (x, y) = (k + 1, k - 1)
( x , y ) = ( k + 1 , k − 1 )
です.このとき最高ネストは
k x = k ( k + 1 ) = N 2 − 1 4 kx = k (k + 1) = \frac{N^2 - 1}{4}
k x = k ( k + 1 ) = 4 N 2 − 1
です.
十分性
S = N 2 S = N^2 S = N 2 とすれば有向グラフの場合でも十分です.
証明
最短の良いウォーク W W W を任意に取り,W W W は
1 = w 0 → w 1 → ⋯ → w L = N 1 = w_0 \to w_1 \to \dots \to w_L = N
1 = w 0 → w 1 → ⋯ → w L = N
とします.W W W の最高ネストを s s s とすると,区間の列
[ 0 , L ] ⊇ [ l 1 , r 1 ] ⊋ [ l 2 , r 2 ] ⊋ ⋯ ⊋ [ l s , r s ] = [ l s , l s + 2 ] [0, L] \supseteq [l_1, r_1] \supsetneq [l_2, r_2] \supsetneq \dots \supsetneq [l_s, r_s] = [l_s, l_s + 2]
[ 0 , L ] ⊇ [ l 1 , r 1 ] ⊋ [ l 2 , r 2 ] ⊋ ⋯ ⊋ [ l s , r s ] = [ l s , l s + 2 ]
であって,任意の i i i に対し,W W W に対応する括弧列において l i + 1 l_i + 1 l i + 1 文字目の ( と r i r_i r i 文字目の ) が対応しているものを取ることができます.
このとき,( w l i , w r i ) = ( w l j , w r j ) , 1 ≤ i < j ≤ s (w_{l_i}, w_{r_i}) = (w_{l_j}, w_{r_j}), 1 \le i < j \le s ( w l i , w r i ) = ( w l j , w r j ) , 1 ≤ i < j ≤ s なる添字 i , j i, j i , j が存在したとすると,区間 [ l i , r i ] [l_i, r_i] [ l i , r i ] が切り出す部分ウォークと [ l j , r j ] [l_j, r_j] [ l j , r j ] が切り出す部分ウォークについて,始点と終点が一致しており,対応する括弧列は共に正しい括弧列で,前者より後者の方が真に短いです.よって W W W において前者の部分を後者に差し替えることで W W W より短い良いウォークを得られますが,これは W W W の最短性に矛盾します.
したがって頂点の組 ( w l i , w r i ) (w_{l_i}, w_{r_i}) ( w l i , w r i ) たちは相異なります.頂点の組は高々 N 2 N^2 N 2 通りなので s ≤ N 2 s \le N^2 s ≤ N 2 です.すなわち S = N 2 S = N^2 S = N 2 なら十分です.□ \square □