匈牙利算法模板(二分图)
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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步