title | documentation_of |
---|---|
Dulmage–Mendelsohn decomposition (DM 分解) |
./dulmage_mendelsohn_decomposition.hpp |
二部グラフの Dulmage–Mendelsohn 分解(DM 分解)を行う.計算量は
左側頂点集合
具体的には,この分割は以下の性質を満たす:
- グラフ
の最大マッチングに採用されうる辺は と を両端点に持つものに限られる. -
は「$G$ の任意の最大マッチングにおいて の頂点は必ず使われるが の各頂点は必ずしも使われるとは限らない」という性質を満たす.$|W^+_0| < |W^-_0|$ または が成立する. -
は「$G$ の任意の最大マッチングにおいて と の各頂点が一対一にマッチングする」という性質を満たす.すなわち が成立する. -
は「$G$ の任意の最大マッチングにおいて の頂点は必ず使われるが の各頂点は必ずしも使われるとは限らない」という性質を満たす.$|W^+_{K + 1}| > |W^-_{K + 1}|$ または が成立する. - 全ての辺
について,$u \in W^+_a$, とすると を満たす.すなわち,$W^{\pm}_k$ たちは全ての辺を から への有向辺とみなした状況においてトポロジカル順序でソートされている.
- まず,与えられたグラフ
の最大マッチング を具体的に一つ求める. - 上記の最大マッチングで使われなかった頂点たちを始点に探索を行い,これらの頂点と交換可能な頂点集合($M$ で使用されない頂点を使用して別の最大マッチングをとった際に使われなくなりうる頂点集合)を求める.この過程で探索した頂点たちで
が構成される. - 残る頂点について,各辺
について有向辺 � を張り,また でマッチングに使用された辺については逆辺も張る.このグラフ上で強連結成分分解・トポロジカルソートを行い残る たちを構成する.
int L, R;
vector<pair<int, int>> edges;
// L: 左側頂点集合サイズ
// R: 右側頂点集合サイズ
// edges: 0 <= u < L, 0 <= v < R を満たす辺 (u, v) からなる
vector<pair<vector<int>, vector<int>>> ret = dulmage_mendelsohn(L, R, edges);
戻り値 ret
は必ず($L = R = 0$ であっても)長さ 2 以上の vector
で,特に ret
の先頭と最後の要素に関する first
, second
の各 vector
は空である可能性がある.
ret
に含まれる各 pair<vector<int>, vector<int>>
について,first
の第 second
の第
- No.1615 Double Down - yukicoder
-
AtCoder Beginner Contest 223 G - Vertex Deletion 与えられた二部グラフ(木)を DM 分解した上で
と のサイズが求められればよい.
- Dulmage–Mendelsohn分解 (DM分解) - 室田一雄
- 伊理・藤重・大山『講座・数理計画法 7 グラフ・ネットワーク・マトロイド』産業図書 1986.