AOJ-ICPC 2016.10.8

解ける問題がなくなってきた。

問題

Box Witch | Aizu Online Judge

問題概要

省略

解法

全頂点対に容量0の辺を張っておく。
最初から辺があるものについては容量1にしておき、最大流を求めておく。以下、この残余グラフ上で考える。
追加のクエリが来たら、その辺の容量を1にし、sourceからsinkに1流した結果を最大流に加える。
削除のクエリが来たら、その辺が使われていなかった場合(容量が1の場合)は容量を0にする。
そうでなければ、削除する辺A {-} BAからBに流れているとする。
その辺の容量を0とし、AからBに1流す。
流れた場合は別のパスが見つかったということなので、最大流は変わらない。
流れなかった場合は最大流は1減らし、sourceからABからsinkのフローを押し戻す。
これはAからsourcesinkからBに1流せばよい。

問題

Alternate Escape | Aizu Online Judge

問題概要

省略

解法

後退解析。
盤面の座標+盤外のH*W+1頂点のグラフを考える。
辺で隣接関係を表現する。辺の重みは最初に壁があれば1、なければ0としておく。
勝ち頂点へ遷移できる頂点は次の2つの条件を満たす頂点である。
 ・勝ちマスへ辺が張られており、その辺の重みが0である。
 ・勝ちマスへ辺が張られており、その辺の重みが1である。
勝ち頂点が増えなくなるまでBFSを繰り返し、初期状態で勝ち頂点にいた場合、勝ちとなる。
コーナーケースとして、一手で盤外に出られる場合は無条件で勝ちとなる。

問題

Deadlock Detection | Aizu Online Judge

問題概要

p個のプロセスとr種類のインスタンスがある。
インスタンスjl_{j}個ある。
プロセスiインスタンスjn_{i,j}個要求する。
デッドロックとは、異なるプロセスが互いに必要なインスタンスを占有しているため、プロセスが途中で実行できなくなることである。
デッドロックは適切な順番でプロセスを実行することで回避できる(終了したプロセスが占有しているインスタンスは解放されるため)。
プロセスがインスタンスを要求するログが与えられるので、デッドロックが発生することが確定する時間を求めよ。

解法

時間で二分探索。
ある状態でデッドロックが発生することが確定しているかどうかは、以下のアルゴリズムで判定できる。
1. 現在残っているインスタンスを全て使って終了させられるプロセスがある場合、
そのプロセスを終了させ、占有していたインスタンスを解放する
2. 1を終了させられるプロセスがなくなるまで繰り返す。
3. 終了できないプロセスが残っていれば、デッドロックが発生する。