完璧主義な王女様

スパイと任務をそれぞれ頂点,割り当て可能な組を辺として 2 部グラフを作ると, このグラフの完全マッチングが女王様が満足できる任務割り当てになります. すなわち,この問題は,完全マッチングを持つ 2 部グラフを入力とし, そのグラフに最少の辺を追加して,どの辺 e を指定されても, e を含む完全マッチングが存在するようにする問題と言い換えられます. 2 部グラフの Dulmage–Mendelsohn (DM) 分解を知っていれば, 結果として得られる 2 部グラフの各連結成分が DM 既約となる (すなわち DM 分解の結果が唯一の成分からなる)ようにすることとも言い換えられます.

まず入力グラフの完全マッチングを一つ求め,これを M とします. 辺 e として M に含まれる辺が指定されたときは,明らかに条件を満たします. M に含まれない辺 e に関して, e がある完全マッチングに含まれうる必要十分条件は, e を取り除いたグラフにその辺の両端点を結ぶような M に関する交互道 (alternating path) が存在することです. この条件は,M の辺を両向きの有向辺で置き換え, それ以外の辺をスパイ側から任務側に向けた有向辺で置き換えて得られる有向グラフで, e の任務側の端点からスパイ側の端点に到達可能であることとも同値です. 追加する辺は M に含まれず,上記の手順ではスパイ側から任務側に向き付けられるので, この問題は「入力 2 部グラフから上記の手順で得られる有向グラフにスパイ側から任務側に向けた有向辺を最小本数追加して, 結果として得られる有向グラフの各連結成分が強連結となるようにすること(強連結でなければ,強連結成分を跨ぐ辺を指定されると完全マッチングに含められない)」と言い換えられます. ここで,完全マッチング M の辺が両向きに向き付けられているため,「スパイ側から任務側に向けた」という条件は実質無視できます.

以上より,この問題は有向グラフの強連結化問題に帰着されました. この問題は,以下の手順で解くことができます.

追加辺はソースとシンクの少なくない方の数以上は必要(それぞれ少なくとも 1 本の入る辺と出る辺が必要なので明らか)であり,以上の手順でそれが達成できているので最小性が保証できます. あとは,得られた追加辺を元の 2 部グラフの辺に戻せば完了です.

強連結化問題への帰着後の計算量は O(n + m) です. 完全マッチングを求める部分は Hopcroft–Karp のアルゴリズム(最大流問題に対する Dinic 法)を用いて O(mn) 時間ででき,(基本的には)こちらがボトルネックとなります. なお,単純な増加道アルゴリズムにより O(nm) 時間かけて完全マッチングを求めたとしても,許容範囲の時間で終了する設定となっています.