二分图最大匹配模板(匈牙利算法)
#include <bits/stdc++.h>
using namespace std;
int n,m,e;
int G[501][501],match[501],vis[501];
int x,y;
int ans;
int dfs(int now)
{
for (int i = 1; i <= m; i++)
{
if(G[now][i] && !vis[i])
{
vis[i] = 1;//被匹配了或者此点没有方案
if(!match[i] || dfs(match[i]))//可以匹配,或者以匹配的点有其他方案
{
match[i] = now;
return 1;
}
}
}
return 0;
}
int main()
{
cin >> n >> m >> e;
for (int i = 1; i <= e; i++)
{
cin >> x >> y;
if( x <= n && y <= m )G[x][y] = 1;
}
for (int i = 1; i <= n; i++)
{
ans += dfs(i);
memset(vis,0,sizeof(vis));
}
cout << ans;
return 0;
}
本质是贪心
流程:
一个一个匹配
遇到匹配过的,取搜那个匹配的点有没有其他的方案,有就结束,没有当前就换点,没点可换,就结束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」