前言:二分图最大匹配其实就是二分匹配
利用了增广路的思想实现了点对间的一一配对
若想理解匈牙利算法可点击此链接
代码实现是比较简单的,匈牙利算法在很多关于匹配的题目中有很灵活的运用(纯属博主瞎逼)
复杂度为
O(n∗m)
代码实现如下:
int link[M];
bool vis[N];
bool Look(int x){
for(int i=0;i<edge[x].size();i++){
int v=edge[x][i];
if(vis[i])continue;
vis[i]=1;
if(link[i]==-1||Look(link[i])){
link[v]=x;
return 1;
}
vis[i]=0;
}
return 0;
}
void check(int m){
memset(link,-1,sizeof(link));
for(int i=1;i<=m;i++){
memset(vis,0,szieof(vis));
if(Look(i))ans++;
}
}