昨晚趁着精神好看资料到三点多,中间发现一道水题就交了一发,居然还submit failed。。。二分图最大匹配最优匹配会了之后感觉很简单,最难的地方还是建图。今天醒来又交了一遍WA,找了半天发现这道题可能有重边。。。(已经在重边这里错了若干次了)
E题swap就是一个二分图最大匹配,可是我怎么都过不了样例,郁闷了我两三天,后来才发现输出任意答案都行,而且根据矩阵性质,如果行交换不能达到条件的话,列交换或行列交换也不可能达到条件。并且它这个交换还是一步交换,即某两行交换完了就不可以再交换。这道题还是有必要写一下题解的。。。(好不容易整出思路,一个小细节错了又害我找了半天)
今天看一般图匹配带花树和二分图多重匹配
貌似二分图多重匹配可以用网络流做。。。赶紧去复习了一下网络流
感觉网络流还是写起来比较麻烦。。。而且为了熟悉二分图多重匹配,就不用网络流做了,以后用网络流再做一遍
先学习完网络流以后,建图就比较好想了。。。于是先去做专题里的题,题目用到二分或floyed也跟网络流里的差不多。。。
专题里三道二分图多重匹配题都用到了二分,也是比较经典的二分,有一道还用到了floyed。
需要注意几点:
1、n和m不能搞混 否则就 WA RE
2、注意初始化 数组及时清零 注意编号 注意是否有重边
3、题意一定要弄清楚,n,m,k都是什么含义,否则我就不说了,都懂
4、用floyed求最短路时一定要把距离0置为inf,因为0会干扰求最短路
5、二分图多重匹配题目用网络流也可以做,不过实现起来比较麻烦,但是两种方式大同小异
贴上poj 2112 Optimal Milking (floyed + 二分图多重匹配/网络流 + 二分)的个人代码:
#include
#include
#include
#include