建模
二分图匹配的模型有两个要素:
节点能分成独立的两个集合,每个集合内部有 $0$ 条边:**$0$ 要素**
每个节点只能与 $1$ 条匹配边相连:**$1$ 要素**
——摘自李煜东《算法竞赛进阶指南》
分析一下这道题的两个要素:
- 每条横向木板之间互不交叉,每条纵向木板之间互不交叉:**$0$ 要素**
- 每个泥地仅能被 $1$ 条最优横向木板和 $1$ 条最优纵向木板包含:**$1$ 要素**
那我们可以以每个泥地为边,以包含其的最优横向木板和最优纵向木板为其左右端点,建立二分图。
题目要求最少木板数覆盖全部的泥地,这可以转化成一次操作可以选择一个点,将所连的边染色,目的是让所有边被染色,然后求最少需要的点数,即为二分图最小点覆盖。
而最小点覆盖等于最大匹配,二分图最大匹配的König定理及其证明 | Matrix67: The Aha Moments,故建图跑匈牙利即可。
匈牙利算法
每次找到一条未匹配-匹配-未匹配-$\cdots$-未匹配的路径,将其取反,得到总匹配数 $+1$。
这条路径被称为增广路。
好了相信你(我)已经学会匈牙利算法了。
代码
1 |
|