2019年11月20日水曜日

KUPC 2014 I - Rain

合計雨量の差にしか興味がないので、費用did_iを使って呪文iiを唱えると地域bib_iの雨量が11減り地域aia_iの雨量が11増える、つまり雨量が11移動するとだけ考えればよい。雨量の移動を自由に繰り返して最小コストで雨量を平準化するのは、最小費用流問題そのものである。

最初の雨量はどの地域も00とし、呪文c1,...,cMc_1, ..., c_Mを唱えて雨量がp1,...,pKp_1, ..., p_Kになったとする。グラフは次のように作ればよい:

  • pv>0p_v>0なら、始点SSからvvに容量pvp_v、コスト00の辺を張る。
  • pv<0p_v<0なら、vvから終点TTに容量pv-p_v、コスト00の辺を張る。
  • bib_iからaia_iに容量\infty、コストdid_iの辺を張る。

SSの出容量のぶんだけTTに流したときの最小コストが答えであり、必要な量を流せない場合は1-1である。計算量(の一例)はO(KElogV){O}(KE \log V)