# General Weighted Matching ### 参考文献リスト 文献 - http://www.cs.kent.edu/~dragan/GraphAn/p23-galil.pdf - https://drive.google.com/file/d/1RD66csuDTAYXPmuCsiPi3HWBwtLg95T5/view - https://resources.mpi-inf.mpg.de/departments/d1/teaching/ss12/AdvancedGraphAlgorithms/Slides07.pdf 実装例 - https://judge.yosupo.jp/submission/81021 - https://networkx.org/documentation/stable/_modules/networkx/algorithms/matching.html#max_weight_matching - https://jorisvr.nl/article/maximum-matching ### 変数一覧 - G:隣接行列(花と頂点のペアは具体的にどの辺を用いているかを保存) - mate:マッチング相手 - p,z:頂点/花の双対変数 - flower:各花の頂点集合 - root:各花のroot(頂点/花) - par:BFS木の親 - isS:0->unlabel,1->S,2->T - slack:ラベルSの頂点/花への辺のうちslack変数が最小値をとるもの ### アルゴリズム詳細 - p(v)=inf,z(k)=0 に初期化,整数で処理するために重みを2倍にしておく - マッチングしていない頂点からtightな辺を交互にたどってBFS - tightかの判定:p(u)+p(v)=w(e) - queueからの頂点は常にラベルSの頂点が入る - 未知の頂点/花と接触したとき、そのマッチング相手をqueueに追加 - 接触時にparを更新する、同じ花に移動しない - S-S間のtightな辺が現れたとき - par,root,mateからLCAを求める - 存在するなら圧縮して花にする(必ずラベルS) - z(k)=0,u ~ lca,v ~ lcaのパスを復元して結合,rootを再帰的に変更 - しないならそれは増加パス パスを復元しながらマッチングを切り替える - BFSで辿るところがない - 双対変数をいじるための $\delta$ を求める - $\delta_1,\delta_4$ : やるだけ - $\delta_2,\delta_3$ - slackを用いて求める - 各種操作でslackを更新する必要あり - pが非正になったら終わり - tightな辺が増えたとき : BFSのときと同じ - ラベルTの花B_kがz[k]=0となったとき : 花を分解する - 親と直接つながっている頂点とrootとのパスを交互道にして、他を孤立点にする
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up