D25 二分图最大匹配 匈牙利算法
视频链接:https://www.bilibili.com/video/BV1GW4y1z7xk/
// Luogu P3386 【模板】二分图最大匹配 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=505,M=100010; int n,m,k,a,b,ans; struct edge{int v,ne;}e[M]; int h[N],idx; int vis[N],match[N]; void add(int a,int b){ e[++idx]={b,h[a]}; h[a]=idx; } bool dfs(int u){ for(int i=h[u];i;i=e[i].ne){ int v=e[i].v; //妹子 if(vis[v]) continue; vis[v]=1; //先标记这个妹子 if(!match[v]||dfs(match[v])){ match[v]=u; //配成对 return 1; } } return 0; } int main(){ cin>>n>>m>>k; for(int i=0;i<k;i++) cin>>a>>b, add(a,b); for(int i=1;i<=n;i++){ memset(vis,0,sizeof vis); if(dfs(i)) ans++; } cout<<ans; return 0; }
// n个不同点的二分图 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=1010,M=200010; int n,m,k,a,b,ans; struct edge{int v,ne;}e[M]; int h[N],idx; int vis[N],match[N]; void add(int a,int b){ e[++idx]={b,h[a]}; h[a]=idx; } bool dfs(int u){ for(int i=h[u];i;i=e[i].ne){ int v=e[i].v; if(vis[v]) continue; vis[v]=1; if(!match[v]||dfs(match[v])){ match[v]=u; match[u]=v; return 1; } } return 0; } int main(){ cin>>n>>m>>k; for(int i=0;i<k;i++) cin>>a>>b,add(a,b+n),add(b+n,a); for(int i=1;i<=n+m;i++){ if(!match[i]){ memset(vis,0,sizeof vis); if(dfs(i)) ans++; } } cout<<ans; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!