P3386 【模板】二分图最大匹配
https://www.luogu.com.cn/problem/P3386
#include <bits/stdc++.h>
using namespace std;
const int MAX=1000+5;
int n,m,e,ans;
int par[MAX];//匹配点的编号
bool vis[MAX];//是否被搜索过
bool ga[MAX][MAX];//邻接矩阵, "true"代表有边相连
bool find(int a)//匈牙利算法
{
for(int i=1;i<=m;i++)
if(ga[a][i]&&!vis[i])//如果i与a有边相连并且没有搜索过i
{
vis[i]=true;//标记为已来过
if(par[i]==0||find(par[i]))//如果i没有匹配||i在匹配中,但是从与i相邻的节点出发可以有增广路
{
par[i]=a;//记录一下
return true;
}
}
return false;
}
int main()
{
memset(ga,0,sizeof(ga));
memset(par,0,sizeof(par));
ans=0;
cin>>n>>m>>e;
for(int i=1;i<=e;i++)
{
int x,y;
cin>>x>>y;
ga[x][y]=true;//x和y有边相连
}
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(find(i)) ans++;
}
cout<<ans<<endl;
return 0;
}