ICPC国内予選2016 H問題 : プレゼント交換会

問題. プレゼント交換会

 n 頂点  m 辺の無向グラフ  G が与えられる.入次数の最大値と最小値の差が小さくなるような各辺の向き付けを求めよ.最適解が複数ある場合は入次数の最小値が大きいものを選ぶとする.

制約 2 \le n \le 100,  1 \le m \le n (n - 1) / 2

解法1. 下限制約付き最大流問題

入力グラフ  G = (V, E) の辺の向き付けで,次数の下限と上限がそれぞれ  l, u となるものが存在するかを判定する.そのために,次のようなネットワーク  H = (V', E') を構成して  H の下限制約付き最大流問題を解く.

  •  V' := \{v_u \mid u \in V\} \cup \{v_e \mid e \in E\} \cup \{s, t\}
  •  E'_1 := \{s v_u \mid u \in V\},\, E'_2 := \{v_u v_e \mid v_u \in e \in E\},\, E_3 := \{v_e t \mid e \in E\}
  •  E' := E'_1 \cup E'_2 \cup E'_3

 H の各辺の容量制約の下限  {\rm lb} : E' \rightarrow \mathbb{Z}_{+} と上限  {\rm ub} : E' \rightarrow \mathbb{Z}_{+} をそれぞれ次のように定義する.

  •  {\rm lb} (e) = l, \, {\rm ub} (e) = u \, \left(e \in E'_1 \right)
  •  {\rm lb}(e) = 0, \, {\rm ub}(e) = 1 \, \left(e \in E'_2 \cup E'_3 \right)

 H の下限制約付き  s- t 最大流問題の最適値が  m に等しい場合は,各次数が  l 以上  u 以下となる  G の辺の向き付けが存在する.具体的には,流量が1となる辺  v_u v_e \in E'_2 に対して,  G 上の辺  e を頂点  u を向くようすればよい.後は, l, u の値を尺取り法で探索すれば答えが求まる.
下限制約付き最大流問題は [2] を参考に最大流問題に帰着して Dinic法で求めた.

計算時間 O(n^7)

解法2. 貪欲法

講評 [1] の貪欲法を実装した.次の2つの規則が適用できなくなるまで繰り返す.規則1は  d(v_0) を1増やし  d(v_i) を1減らす.また,規則2は  d(v_0) を1減らし  d(v_i) を1増やすことが出来る.

  1. 最小次数の頂点  v_0 から  d(v_0) + 2 \le d(v_i) を満たす頂点  v_i まで有向辺に従いながら移動して有向辺を逆向きにする
  2. 最大次数の頂点  v_0 から  d(v_0) - 2 \ge d(v_i) を満たす頂点  v_i まで有向辺の逆向きに従いながら移動して有向辺を逆向きにする

計算時間 O(n^2 m)

まとめ

解法1は計算時間が  O(n^7) で絶望的だけど実際は速い.Dinic法はそんなものらしい?下限制約付き最大流問題はあまり理解できてない.