bool dfs(int now){
for(int i=h[now];i;i=nxt[i]){
int t=to[i];
//这里不用考虑会有回到父结点的边的问题
//因为每次都是从左部找邻接点
if(!vis[t]){
vis[t]=true;
//如果邻接点t是非匹配点,则找到一条增广路,匹配
//如果t已匹配过,但是能重新匹配,则也找到一条增广路
//让t与now匹配
if(!match[t]||dfs(match[t])){
match[t]=now;
return true;
}
}
}
return false;
}
//匈牙利算法求最大匹配
int xyl(){
int ans=0;// 记录最大匹配数
for(int i=1;i<=n;i++){
memset(vis,false,sizeof(vis));
//找到一条增广路,匹配数+1
if(dfs(i)) ans++;
}
return ans;
}
标签:二分,匹配,int,vis,算法,match,now,模板
From: https://www.cnblogs.com/cuichenxi/p/18187832