活動記録(2017/9/18/-2017/9/24)
競技プログラミング
Code Festival 予選
結果 894th, 1679 -> 1640 (パフォーマンス:1287)
体調不良の時にratedなコンテストに出てはいけない。
その他
メンタルと体調がどっちも死んでた
AOJ2224: Save your cats
Save your cats | Aizu Online Judge
解き方
- pileを頂点、fenceを辺としたグラフを考えると、その双対グラフの最小全域木(コストは、fenceの長さ)を求めれば良い
- 双対グラフを求めるためには、最短閉路の列挙などする必要があり面倒
- 元の平面グラフの全域木に使われた辺を、双対グラフ上で削除すると、そのグラフは双対グラフの全域木となる
- もとのグラフで最大全域木を求めて、辺全体のコストから引けば、双対グラフの最小全域木のコストが求められる
ハマったところ
- 双対グラフの最小全域木を考える必要があることはわかったが、双対グラフの性質を存在ごと完全に忘れていた
- 双対グラフの性質はまとめて覚えておく必要がありそう
ARC083 E: Bichrome Tree
解き方
- ある頂点
i
の部分木について、黒白それぞれの重みの和を、b_i, w_i
として、それを更新していく- 黒白は入れ替えても問題ないので、違う色か同じ色かだけ考えれば良い
- 頂点
i
がleafの場合、色はどちらでもよく、重みはx_i
になる - 頂点
i
がleafでない場合- 子どもの重みの割当
b, w
をそれぞれまず計算する i
へ色と重みを割り当てると、b_i = x_i
またはw_i = x_i
を満たすが、ここでx_i
でない方はできるだけ小さい方がその後の重み割当がしやすくなる- 頂点
i
の子どものリストをc_1, c_2, ..., c_n
として、dp[j][k] = c_1, ... c_iまでを使って、重みの和がjになるような色の割り当て方があるかどうか(true, false)
と定義してDP dp[n][k] = true
となる最大のk
を用いてi
への色の割当を考える
- 頂点
- 子どもの重みの割当
- 計算量の見積もり(怪しい)
- DPについて:
k <= X_i
として問題なく、さらに各辺について、1回しかこのDPで参照されないので、解法全体を通してO(NX)
で収まるはず dp[n][k] = true
なる最大のk
を求める:O(X)
- これは各頂点について行われるので、解法全体で
O(NX)
- これは各頂点について行われるので、解法全体で
- 解法全体では
O(NX)
のはず
- DPについて:
ARC083 D: Restoring Road Network
解き方
- これまでに追加した辺のコストの合計と、その辺による各都市間の最短距離(
d[i][j]
)を保持、更新する - 距離が小さい方から順に考えていく。
町
i, j
間の最短距離がc
の時、- もし、
d[i][j] == c
ならば、もう辺を追加する必要はない (A) d[i][j] < c
ならば、c
が最短距離であることに矛盾するので、そのようなグラフはないd[i][j] > c
の時、i, j
間にコストc
の辺を追加する。コストの合計にc
を足し、最短距離をd[s][t] = min(d[s][t], d[s][i] + c + d[j][t], d[s][j] + c + d[i][t])
で更新する
- もし、
- すべての町のペアに対して行うので、外側のループが
N^2
回、内側のコストの更新がO(N^2)
なので、全体でO(N^4)
の解法となり、N <= 300
なので間に合う
その他
- Warshall Floydをしながら、各辺が更新された回数を記録する(2回以上更新された時、その部分は上記解法でいう(A)に当たる)という解法もあり、こっちのほうが綺麗に解けそう
ARC083 C: Sugar Water
解き方
- A, B, C, Dそれぞれの操作を何回するか、全探索
- A, Bについては、
100A <= F <= 30 * 100
より、たかだか30回 - C, Dについては、最大で
F/2
g溶ける(E=100の時)ので、たかだか1500回
- A, Bについては、
- 合計で[tex:O(109)]なので、ダメでは?という気もするが、間に合った
- 水のありうる量を列挙、砂糖のありうる量を列挙し、各水の量について、最大の砂糖の量を二分探索、とすると、
O(1500^2+30^2*log(1500^2))
となって十分間に合う感じになりそう
- 水のありうる量を列挙、砂糖のありうる量を列挙し、各水の量について、最大の砂糖の量を二分探索、とすると、
ハマったところ
- 濃度の比較を整数で行おうとした時、の式変形で、としていてWA
活動記録(2017/9/11-2017/9/17)
競技プログラミング
ARC083
結果 97th, 1551->1679 (Perf: 2363)
Cを3回WAしてダメかと思ったが、うまいことEまで解けた。
AOJ0189, AOJ2249, AOJ2200
蟻本練習問題。warshall floydだったりdijkstraだったり、最短経路問題の基本系
その他
- 金沢行ってきた
- Wake on LANの設定したら、強制再起動かかるようになった(諦めた)