题目链接:点击查看
题目大意:n个男生和n个女生配对,配对规则如下:
- 每个女生都可以选择没有吵过架的男生匹配
- 若女生A的好朋友是女生B,且女生B没有和男生C吵过架,则女生A也可以和男生C匹配
现在问最多可以匹配多少轮,要求每轮必须完全匹配,且每个男生匹配的女生以及每个女生匹配的男生都不能重复,求最大匹配轮数
题目分析:这个题目有两个做法,我都稍微说一下吧,因为这个题目挂在了网络流的题集里,所以自然得用网络流试试啦。。这是一个经典的二分图匹配问题了,但是限制稍微多了些,对于条件2,我们可以用并查集来处理,要记得实时记录哪些边已经建过了,防止重复建边,对于最后答案的求法,因为答案最小为0,最大为n,所以我们可以二分匹配轮数,也就是判断最后汇点的流量是否等于匹配轮数与人数n之积,这样就能解决这个题了
其实也可以直接用匈牙利跑,毕竟n只有100,每跑一次匈牙利,记得删掉已经匹配的边,跑到不能跑为止就好啦
网络流+二分+并查集:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
匈牙利删边:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include